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);
我没有测试过这个,我是按照我认为有效的方式写的