模型对话框移动到主窗口后面的 Qt 错误

Posted

技术标签:

【中文标题】模型对话框移动到主窗口后面的 Qt 错误【英文标题】:Qt bug where model dialog moves behind main window 【发布时间】:2019-07-15 19:33:20 【问题描述】:

我有一个很难解决的错误。我有两个窗户。

窗口 A 是包含文本框的主窗口(在此简化版本中)。用户可以通过在窗口 B 显示为键盘的位置单击该文本框来编辑该文本框的内容。除了数字按钮外,还有 2 个附加按钮,Enter 和 Done。如果用户更改值并按 Enter,则文本框中的值会立即更新。然后按完成将退出窗口。

但是,如果用户在没有先按 Enter 的情况下按完成,则会出现一个模式对话框,询问用户是否要保存该值。一旦做出选择,模型对话框和窗口 B 将退出。

当用户输入一个值并按下“完成”按钮时,就会出现该错误。当模态对话框出现时,窗口 B 移动到窗口 A 后面。应该发生的是窗口 B 停留在窗口 A 之上。有趣的是,当我单步执行代码时,这个错误从未发生,这使得精确定位变得棘手。

以前有没有人遇到过这个问题?

我目前在最新版本的 Linux Mint 上运行 Qt 5.9(在撰写本文时)

另外,我准备了一个示例项目来演示这个错误。由于它的复杂性较大,我无法将其放入 1 个文件中。如果需要,我这周可能会抽出一些时间将所有内容移到一个文件中。但是,如果允许,我可以发布 Dropbox 链接。

【问题讨论】:

你试过玩窗口标志吗?曾经在 Ubuntu 上遇到过一些问题。您是否尝试将 Window A 设置为 Window B 的父级?更多的方式,也许?您能否发布您设置窗口属性并从另一个调用显示窗口的代码的确切部分,以便可以检查所描述的行为? 【参考方案1】:

可能是[QDialog][1]类的父子关系设置错误造成的。

以下段落可能对您的应用程序至关重要,但如果您不展示最小可重现示例,则很难说。

注意:对话框的父关系并不意味着 对话框将始终堆叠在父窗口的顶部。确保 对话框总是在顶部,使对话框模态。这也是 适用于对话框本身的子窗口。为确保孩子 对话框的窗口停留在对话框的顶部,使孩子 窗口模式也是如此。

【讨论】:

您好,感谢您分享这篇文章,我再次查看了我的代码,我认为我修复了这个错误。我添加了一行将导致弹出窗口(当应用程序需要与用户确认时出现的弹出窗口)设置为模式。到目前为止,这已经解决了我的问题。将进行额外的测试! 好的,看起来一切都在按预期工作。非常感谢!

以上是关于模型对话框移动到主窗口后面的 Qt 错误的主要内容,如果未能解决你的问题,请参考以下文章

Qt 技巧:去除对话框边框 + 设置窗口可移动和透明

[杂谈]系统对话框(如浏览目录)被隐藏到主窗体后面造成程序无法操作的临时处理方式

QT中想在子线程中创建对话窗口怎么建

显示对话框后无法将焦点返回到主窗口

如何在pyqt中从对话框窗口检索数据到主窗口?

关于Qt5-- 两个窗口互相切换的例子