C++ 窗口模式QFileDialog在exec()之后将父对象推送到后台

C++ 窗口模式QFileDialog在exec()之后将父对象推送到后台,c++,qt,qfiledialog,C++,Qt,Qfiledialog,我把我的问题归结为它所需要的,所以不要介意它没有做任何有用的事情,如图所示 我有我的main窗口,这是一个qmain窗口,里面有一个QPushButton,我将该按钮的clicked()信号连接到qmain窗口的以下插槽: void MainWindow::followingSlot() { OpenFileDialog(this); } OpenFileDialog是一个免费函数: void OpenFileDialog(QWidget * inParent) { QFile

我把我的问题归结为它所需要的,所以不要介意它没有做任何有用的事情,如图所示

我有我的
main窗口
,这是一个
qmain窗口
,里面有一个
QPushButton
,我将该按钮的
clicked()
信号连接到
qmain窗口
的以下插槽:

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个或更多的
main窗口在运行。然后,在调用
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();
}
这将我的
main窗口
带回到前面,但您可以看到窗口短暂地切换位置

我通过谷歌、QtCentre等网站没有发现类似的问题。是否有方法停止此行为并将焦点保持在有焦点的
main窗口上

我正在Mac上使用Qt4.8

编辑: 我发现不是当前的
MainWindow
被向后推,而是
MainWindow
在堆栈中处于第二位,被拉到前面。如果我从左堆栈开始,我将以右堆栈结束(顶部在前面,底部在后面):


您是否尝试过将模态设置为Qt::ApplicationModel。这样,FileDialog对整个应用程序是模态的,而不仅仅是父窗口。

那么问题就不会发生,但我不希望FileDialog是模态的。我希望它是窗口模式(特别是因为这会导致Mac上的工作表对话框)。
current MainWindow    other MainWindow   raise() current MainWindow
other application  -> current MainWindow ------> other MainWindow
other MainWindow      other application          other application