这里的前提是你懂得 QGraphics 的用法,如果不懂的话,建议先从这里学习 Qt快速入门系列教程,如果已经有 QWidget 的基础,建议直接学习 第 19 篇及第 20 篇。
QGraphicsTextItem 可以被嵌套
与其他 QGraphicsItem 的子类一样,QGraphicsTextItem 可以被其他的类嵌套,如新建一个子类 QGraphicsTest,继承自 QGraphicsObject,在其构造函数中添加以下代码:
QGraphicsTextItem *testText = new QGraphicsTextItem(this);
testText->setPlainText(tr("InitialD"));
testText->setPos(10, 10);
QGraphicsTextItem 可以作为编辑框
需要设置:
testText->setTextInteractionFlags(Qt::TextEditable);
这样就可以在该图形元素上编辑文字。
但是这里有个问题,你无法使用键盘上的方向键来进行光标的移动。
注意,这并不是因为你将该图形元素嵌套进其他元素中所导致的事件传递错误,因为如果你使用这样的代码,在将其添加到 QGraphicsScene 中时也会发生同样的问题。
这里需要使用的是:
testText->setTextInteractionFlags(Qt::TextEditorInteraction);
这样你就可以使用光标的移动。
在 Qt 的文档中有关于此的说明:
Constant | Value | Description |
---|---|---|
Qt::TextEditable | 16 | The text is fully editable. |
Qt::TextEditorInteraction | TextSelectableByMouse | TextSelectableByKeyboard | TextEditable | The default for a text editor. |
Qt::TextBrowserInteraction | TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard | The default for QTextBrowser. |
可以理解为,Qt::TextEditable 产生 QTextEdit 的效果,Qt::TextEditorInteraction 产生 QPlainTextEdit 的效果,Qt::TextBrowserInteraction 产生 QTextBrowser 的效果。