我有一个带有输入掩码的QLineEdit
,因此某种类型的代码可以轻松地输入(或粘贴)。由于您可以在QLineEdit
中的任何位置放置光标,即使没有文本(因为有来自输入掩码的占位符):
如果人们不够小心和不注意这会导致他们在文本框中间输入,而应该从开头开始输入。我尝试通过安装事件过滤器来确保光标在聚焦时在开头:
bool MyWindowPrivate::eventFilter(QObject * object, QEvent * event)
{
if (object == ui.tbFoo && event->type() == QEvent::FocusIn) {
ui.tbFoo->setCursorPosition(0);
}
return false;
}
这段代码在键盘聚焦时可以正常工作,例如按下⇆或⇧+⇆,但是使用鼠标单击时,光标总是停留在单击的位置。我猜测是
QLineEdit
在获得焦点后,在单击后自己设置了光标位置,从而撤销了我的位置更改。
深入挖掘一下,单击¹并改变焦点时会引发以下事件:
FocusIn
MouseButtonPress
MouseButtonRelease
我无法准确捕获事件过滤器中的鼠标单击事件,因此有没有一种良好的方法,只在控件获得焦点时(无论是由鼠标还是键盘触发)开始设置光标位置?
¹ 旁注:我讨厌Qt没有关于常见场景信号/事件顺序的文档说明。