Qt:QLineEdit游标在textChanged()或commitData()之后移动到结尾

时间:2013-04-04 01:52:35

标签: qt qtableview qlineedit

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

我使用了这段代码:Qt: Signal while a QTableView item data is being edited instead of after edit is done?主要是有用的。它将QLineEdit textChanged()信号连接到编辑器的commitData()信号。

此代码的问题在于,当用户键入时,QLineEdit的插入光标始终跳转到结尾。如果要将文本附加到行的末尾,那就没问题了。但是,如果用户想要在行的中间插入或编辑文本,则每次键入一个字母时,文本插入光标都会跳转到QLineEdit的末尾。每次击键后,他们必须重新定位光标,以便在中间完成插入/编辑。

如果我禁用了映射器,那么光标不会跳转,因此它不是编辑器委托固有的东西;只有在使用上面链接的问题中的代码时才会发生。

我查看了QLineEdit textChanged()commitData()的代码,但我无法弄清楚是什么导致光标跳转到QLineEdit的末尾。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:3)

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

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