QDialog关闭后,QMainWindow没有重新获得焦点

时间:2012-05-14 15:33:34

标签: c++ qt user-interface focus

作为this question的后续行动:

我有一个打开QDialog的QMainWindow。当QDialog关闭时,焦点“丢失” - QMainWindow没有将其恢复,并且没有其他小部件似乎拥有它(实际上,除了这两个之外没有活动的小部件)。如何通过QMainWindow强制重新获得焦点? 目前我在我的QMainWIndow的事件过滤器中这样做:

if(!hasFocus()) { 
    setFocus();
}

但是,我担心这个修复是错误的,可能会导致我现在无法想象的错误...

更新+代码:

我的QMainWindow安装了一个事件过滤器。它包含一个QWidget对象,其父对象是QMainWindow。小部件的构造函数:

MyWidget::MyWidget(QWidget *parent) :
 QWidget(parent) {
 ui.setupUi(this);
 installEventFilter(parent);
 // do something here
}

QWidget对象有一个插槽,可以创建一个对话框并调用它的exec函数:

void MyWidget::openDialog() {
 MyDialog dialog(num);
 if (!dialog.exec()) {
   return;
 }
 setNum(dialog.getNum());
}

正如您所看到的,对话框没有父集 - 开头就是这种情况。我试图改变它,但不是

MyDialog dialog(num, this);

,也不

MyDialog dialog(num, parentWidget());

的工作。

解决方案:

显然,在对话框关闭后,一个小按钮正在窃取焦点。该按钮位于主窗口上的小部件中。 这是一个非常讨厌的错误,花了我很多时间和精力去寻找。

0 个答案:

没有答案