我刚刚实现了一个QLineEdit
在获得焦点后立即选择它的文本。我创建了一个派生类并添加了
virtual void focusInEvent(QFocusEvent *event) override;
到标题。我首先尝试像这样实现它:
void MyLineEdit::focusInEvent(QFocusEvent *event)
{
QLineEdit::focusInEvent(event);
selectAll();
}
但它不会选择文本,显然,在selectAll()
调用某些内容时尚未处理。
可行的解决方案是将selectAll()
调用放入QTimer::singleShot
lambda 调用中,等待时间为 0 秒,如下所示:
void MyLineEdit::focusInEvent(QFocusEvent *event)
{
QLineEdit::focusInEvent(event);
QTimer::singleShot(0, [this]() { selectAll(); } );
}
这允许在selectAll()
调用之前处理所有内容并且一切正常。
这只是一个例子,我已经多次遇到这个问题。所以我想知道是否有一个预定义的方法告诉Qt“执行以下,但之前处理其他所有内容”?