在exec()之后,窗口模式QFileDialog将父级推送到后台
Window modal QFileDialog pushing parent to background after exec()
我把我的问题归结为必要的,所以不要介意它没有任何用处,如图所示。
我有我的MainWindow
,它是一个内部有QPushButton
的QMainWindow
,我将该按钮的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();
}
一切都很好,直到我有两个或更多的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();
}
这让我的MainWindow
回到了前面,但你可以看到窗口在短暂地切换位置。
我通过谷歌、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
是否尝试将模态设置为Qt::ApplicationModal。这样,FileDialog对整个应用程序是模态的,而不仅仅是父窗口。
相关文章:
- 为 QFileDialog 设置默认的 UNC 路径
- 限制用户可以在 QFileDialog 中选择的文件数量
- Windows 后台服务(系统配置文件)无法使用 C++ 访问 win 10 上的用户 appData 文件夹?
- 递归函数调用在后台工作
- 如何制作启动 Python 脚本的 linux 后台进程(在 c 中)
- 在qt QFileDialog中设置后缀在linux中不起作用,如何解决?
- 筛选 QFileDialog 中显示的目录
- 目标C++,如何在后台线程中使用运行循环?
- 与Qt同时运行后台循环或回调C++应用程序?
- 媒体基金会:WavSink以比实时消耗率更快的速度处理音频-是否可以实时限制后台处理
- 为什么我的线程不在后台运行?
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 在后台循环,同时运行其他语句 C++
- 零MQ 后台线程创建
- CredUIPromptForWindowsCredentials在后台线程中引发Microsoft C++未经处理的异
- 如何禁用或隐藏 QFileDialog 中的默认取消按钮?
- Bash run 命令在子壳的后台运行
- 继承、后台线程和 RAII
- 如何在后台运行QProcess?
- 在exec()之后,窗口模式QFileDialog将父级推送到后台