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