qt - QLineEdit 光标在 textChanged() 或 commitData() 之后移动到结束

标签 qt qtableview qlineedit qtextcursor

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

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

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

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

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

最佳答案

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

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

关于qt - QLineEdit 光标在 textChanged() 或 commitData() 之后移动到结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15801259/

相关文章:

c++ - "error: within this context"在Qt 5中安装QFtp

c++ - 如何在 Qt Creator 项目向导中添加自定义构建步骤?

python - 如何在 QTableWidget 中使特定单元格可编辑并保留其余单元格不可编辑?

Python Qt QLineEdit 奇怪的编码

css - 如何在 QLineEdit 和 QPushButton 中只为边框的一侧设置样式表?

c++ - 如果我向 QTreeWidget 添加一个项目,它总是被插入到第一行

c++ - 如何使条件编译标志可用于 QT moc 文件?

windows - QTableView:如何将鼠标悬停在整行上?

c++ - QTableView中的Qt隐藏列

c++ - 如何在 QGraphicsScene 中更改 QLineEdit 的背景颜色