窗口模式QFileDialog在exec()之后将父级推送到后台

时间:2013-08-01 15:51:45

标签: c++ qt qfiledialog

我将我的问题解决了所需的问题,所以不要介意这没有用,如此处所示。

我的MainWindowQMainWindow,里面有QPushButton,我将该按钮的clicked()信号连接到{{1}的下一个广告位}}:

QMainWindow

void MainWindow::followingSlot() { OpenFileDialog(this); } 是一个免费功能:

OpenFileDialog

一切正常,直到我有2个或更多void OpenFileDialog(QWidget * inParent) { QFileDialog dialog(inParent, "caption"); dialog.setFileMode(QFileDialog::ExistingFiles); dialog.setWindowModality(Qt::WindowModal); dialog.exec(); } 个玩法。然后,在MainWindow调用结束时,当前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(); } 回到正面,但你可以看到窗口短暂切换位置。

我发现Google,QtCentre或SO没有类似的问题。有没有办法阻止这种行为并将焦点放在有焦点的MainWindow上?

我在Mac上使用Qt 4.8。

修改 我发现当前的MainWindow不会被推回,而是堆栈中第二个的MainWindow被拉到前面。如果我从左侧堆栈开始,我将以正确的堆栈结束(顶部位于前面,底部位于后面):

MainWindow

1 个答案:

答案 0 :(得分:0)

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