如何将输入焦点设置为Qt中显示的对话框?
在一个按钮单击插槽中,我创建并exec()
了一个带有空父对象的对话框。 在对话框的构造函数中,我有:
this->activateWindow();
this->raise();
this->setFocus();
该对话框是应用程序模式,并具有强烈的重点。 但是,它不响应键盘事件,直到我点击它。 如何让对话无需点击即可获得焦点?
问题是我设置了Qt:Tool窗口标志。 使用Qt :: Popup或Qt :: Window代替会导致在显示对话框时自动设置输入焦点。
我自己使用了Qt :: Window。 其他一些标志可能也会起作用,但主要的是QD :: Tool标志的QDialog在显示对话框时不会自动设置输入焦点。
安装该对话框的事件过滤器。
classObject->installEventFilter(this);
void className::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Space)
{
focusNextChild();
}
else
{
QLineEdit::keyPressEvent(event);
}
}
更多信息请参考这里。 http://doc.trolltech.com/4.6/eventsandfilters.html
在我的情况下,甚至设置Qt :: Window也没有办法。 我不得不
QMetaObject::invokeMethod(widgetToFocus, "setFocus", Qt::QueuedConnection);
在show()
或exec()
。
上一篇: How to set input focus to a shown dialog in Qt?
下一篇: Why does calling abort() on ajax request cause error in ASP.Net MVC (IE8)