Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将输入焦点设置为Qt中显示的对话框?_C++_Windows_Qt - Fatal编程技术网

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先把它弄清楚。