3

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

我使用了这段代码:Qt:在编辑 QTableView 项目数据时发出信号,而不是在编辑完成后发出信号?这主要是有效的。它将QLineEdit textChanged()信号连接到编辑器的commitData()信号。

这段代码的问题在于,当用户键入时,QLineEdit的插入光标总是跳到末尾。如果您将文本附加到行尾,那很好。但是如果用户想在行的中间插入或编辑文本,每输入一个字母,文本插入光标就会跳到QLineEdit. 每次击键后,他们必须重新定位光标才能在中间完成插入/编辑。

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

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

4

1 回答 1

6

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

int pos = lineEdit->cursorPosition();
// change text
lineEdit->setCursorPosition(pos);
于 2013-04-04T16:00:07.290 回答