作为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());
的工作。
显然,在对话框关闭后,一个小按钮正在窃取焦点。该按钮位于主窗口上的小部件中。 这是一个非常讨厌的错误,花了我很多时间和精力去寻找。