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

Qt bug where model dialog moves behind main window

本文关键字:Qt 错误 窗口 对话框 移动 模型      更新时间:2023-10-16

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

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

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

当用户输入值并按"完成"按钮时,会发生此错误。当模式对话框出现时,窗口 B 将移动到窗口 A 后面。有趣的是,当我逐步执行代码时,此错误永远不会发生,这使得查明变得棘手。

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

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

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

也许问题源于 [QDialog][1] 类的父子关系设置错误。

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

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