Qt 在文本更改时更新QGraphicsTextItem
我一直在使用Qt 在文本更改时更新QGraphicsTextItem,qt,qtruby,qgraphicstextitem,Qt,Qtruby,Qgraphicstextitem,我一直在使用QGraphicsTextItem。目前,我在一个场景中布置了一个场景,每个场景都描绘了一页实际的文本。现在我正在重写keyreleasevent函数,以便在所有页面上重新分发键入的文本。问题是,当我使用setPlainText设置文本时,光标移回设置为场景焦点项目的textitem的开头 正如您可以想象的,这在键入时是有问题的,尤其是在另一个页面上,而不是在设置为焦点的页面上,这也使得用于剪切和复制的键盘快捷键根本无法工作 有没有一种方法可以在不重置光标/移动光标的情况下设置QGr
QGraphicsTextItem
。目前,我在一个场景中布置了一个场景,每个场景都描绘了一页实际的文本。现在我正在重写keyreleasevent
函数,以便在所有页面上重新分发键入的文本。问题是,当我使用setPlainText
设置文本时,光标移回设置为场景焦点项目的textitem
的开头
正如您可以想象的,这在键入时是有问题的,尤其是在另一个页面上,而不是在设置为焦点的页面上,这也使得用于剪切和复制的键盘快捷键根本无法工作
有没有一种方法可以在不重置光标/移动光标的情况下设置
QGraphicsTextItem的文本?对于您的问题,我认为有一种方法可以解决,但我不确定这是最好的方法。这是:
您可以在QGraphicsTextItem
上调用textCursor()
,以获取QGraphicsTextItem
的QTextCursor
。使用此光标,您可以通过调用position()
来确定其位置。然后保留该值,更新文本,然后通过创建一个新的QTextCursor
,用setPosition(int pos,MoveMode m=MoveAnchor)
设置光标的位置来设置光标的位置
我希望这有帮助
编辑添加示例:
// graphicsTextItem is of type QGraphicsTextItem*
QTextCursor cursor = graphicsTextItem->textCursor;
int startPosition = cursor.position();
// Do all you need to update your text.
QTextCursor afterCursor;
afterCursor.setPosition(startPosition);
graphicsTextItem->setTextCursor(afterCursor);
我没有测试过这个,我是按照我认为有效的方式写的