我有一个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
的末尾。有任何想法吗?谢谢!
答案 0 :(得分:3)
您可以记住上一个文本光标位置,然后手动设置它:
int pos = lineEdit->cursorPosition();
// change text
lineEdit->setCursorPosition(pos);