Qt QLineEdit光标移动到textChanged()或commitData()之后的末尾

Qt QLineEdit光标移动到textChanged()或commitData()之后的末尾,qt,qtableview,qlineedit,qtextcursor,Qt,Qtableview,Qlineedit,Qtextcursor,我有一个QTableView,其中一列使用QLineEdit作为其编辑器代理,其他列需要在用户键入QLineEdit时动态更新(例如,其中一列包含在QLineEdit中键入的文本的长度,它应该随着用户键入而更新,而不是等待他们按Enter键提交) 我使用了这个代码:它主要起作用。它将QLineEdit textChanged()信号连接到编辑器的commitData()信号 这个代码的问题是,当用户类型时, QLINEEDIT/的插入光标总是跳转到末尾。如果您将文本附加到行的末尾,那就行了。但是

我有一个
QTableView
,其中一列使用
QLineEdit
作为其编辑器代理,其他列需要在用户键入
QLineEdit
时动态更新(例如,其中一列包含在
QLineEdit
中键入的文本的长度,它应该随着用户键入而更新,而不是等待他们按Enter键提交)

我使用了这个代码:它主要起作用。它将
QLineEdit textChanged()
信号连接到编辑器的
commitData()
信号

这个代码的问题是,当用户类型时, QLINEEDIT/<代码>的插入光标总是跳转到末尾。如果您将文本附加到行的末尾,那就行了。但是如果用户想要插入或编辑行的中间文本,每次键入一个字母时,文本插入游标跳转到“C”的结尾。在每次击键之后,它们必须重新定位光标,以便在中间完成插入/编辑。

如果禁用映射器,则光标不会跳转,因此它不是编辑器委托固有的特性;它仅在使用上面链接的问题中的代码时发生


我查看了
QLineEdit textChanged()
commitData()
的代码,但我不知道是什么原因导致光标跳到
QLineEdit
的末尾。有什么想法吗?谢谢!

您可以记住最后一个文本光标位置,然后手动设置如下:

int pos = lineEdit->cursorPosition();
// change text
lineEdit->setCursorPosition(pos);

谢谢。这当然是正确的答案,但棘手的部分是根据正在发生的信号链和插槽确定何时保存和恢复光标位置。我不知道是否忽略了一些简单的问题,但最终我找到了答案。另请参阅。