QDialog关闭后,QMainWindow不会重新获得焦点

作为这个问题的后续行动:

我有一个打开QDialog的QMainWindow。 当QDialog关闭时,焦点会“丢失” - QMainWindow无法恢复,并且没有其他小部件似乎拥有它(实际上,除了那两个之外,没有活动小部件)。 我如何通过QMainWindow强制重新获得焦点? 目前我在我的QMainWIndow的eventFilter中执行此操作:

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());

工作。

解:

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

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

上一篇: QMainWindow does not regain focus after QDialog is closed

下一篇: Use dialog controls without stealing focus