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