我将我的问题简化为必要的问题,所以不要介意这没有任何用处,如此处所示。
我有MainWindow
一个QMainWindow
带有QPushButton
内部的 a,我clicked()
将该按钮的信号连接到以下插槽QMainWindow
:
void MainWindow::followingSlot()
{
OpenFileDialog(this);
}
OpenFileDialog
是一个自由函数:
void OpenFileDialog(QWidget * inParent)
{
QFileDialog dialog(inParent, "caption");
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setWindowModality(Qt::WindowModal);
dialog.exec();
}
一切正常,直到我有 2 个或更多MainWindow
s 在玩。然后,在QFileDialog::exec()
调用结束时,当前MainWindow
被推回“焦点堆栈”中的一个位置,MainWindow
第二个被激活并跳转到前台。我希望处于活动状态且位于前面的窗口保持活动状态且位于前面。
我当然可以适应OpenFileDialog
以下情况:
void OpenFileDialog(QWidget * inParent)
{
QFileDialog dialog(inParent, "caption");
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setWindowModality(Qt::WindowModal);
dialog.exec();
inParent->raise();
inParent->activateWindow();
}
这让我MainWindow
回到了前面,但你可以看到窗户短暂地切换了位置。
我通过 Google、QtCentre 或 SO 没有发现类似的问题。有没有办法阻止这种行为并将注意力集中在MainWindow
有焦点的事情上?
我在 Mac 上使用 Qt 4.8。
编辑:
我发现不是当前MainWindow
被推回,而是MainWindow
堆栈中的第二个被拉到前面。如果我从左边的堆栈开始,我将以右边的堆栈结束(顶部在前面,底部在后面):
current MainWindow other MainWindow raise() current MainWindow
other application -> current MainWindow ------> other MainWindow
other MainWindow other application other application