C++ 如何将输入焦点设置为Qt中显示的对话框?
在一个点击按钮的窗口中,我创建了一个带有空父对象的对话框。在对话框的构造函数中,我有:C++ 如何将输入焦点设置为Qt中显示的对话框?,c++,windows,qt,C++,Windows,Qt,在一个点击按钮的窗口中,我创建了一个带有空父对象的对话框。在对话框的构造函数中,我有: this->activateWindow(); this->raise(); this->setFocus(); 该对话框是应用程序模式,具有很强的焦点。但是,在我单击它之前,它不会响应键盘事件。如何使对话框获得焦点而不必单击它?为对话框安装事件过滤器 classObject->installEventFilter(this); void className::keyPressEv
this->activateWindow();
this->raise();
this->setFocus();
该对话框是应用程序模式,具有很强的焦点。但是,在我单击它之前,它不会响应键盘事件。如何使对话框获得焦点而不必单击它?为对话框安装事件过滤器
classObject->installEventFilter(this);
void className::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Space)
{
focusNextChild();
}
else
{
QLineEdit::keyPressEvent(event);
}
}
有关更多信息,请参阅此处。
问题是我设置了Qt:Tool窗口标志。改用Qt::Popup或Qt::Window将导致在显示对话框时自动设置输入焦点
我自己也用过。其他一些标志可能也会起作用,但最重要的是,当对话框显示时,带有Qt::Tool标志的QDialog不会自动设置输入焦点。在我的情况下,即使设置Qt::Window也不会这样做。我不得不
QMetaObject::invokeMethod(widgetToFocus, "setFocus", Qt::QueuedConnection);
在
show()
或exec()
之前,该类只是一个QDialog派生类,设置了以下窗口标志:(Qt::CustomizeWindowint | Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint
它没有子项,也没有父项。无论如何,对于想要获取键盘事件的对话框,请为对话框安装事件过滤器,在对话框构造函数中编写此->installEventFilter(this);我重新调用函数“FocusNext Child()”在我上面的示例中。在对话框中,herder文件declare keyPressEvent函数和cpp文件提供了上述实现,您的意思是什么?this->installEventFilter(this);void QDialogDerived::keyPressEvent(QKeyEvent*event){QLineEdit::keyPressEvent(event);//我在这里处理吗?}你可以根据事件检查键类型,如空格或enter键…等等。我尝试过,但没有效果。请看,问题是,当对话框显示时,它没有输入焦点。我可以用鼠标单击对话框,它就可以获得输入焦点。我需要使对话框自动获得输入焦点,而无需cli先把它弄清楚。