如何将输入焦点设置为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()

链接地址: http://www.djcxy.com/p/1023.html

上一篇: 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)