使用Qt 5.3.0和
Windows 8.1:
不知道我是否遗漏了某些东西,或者这是否是Qt中的疏忽,但当我只是有一个QMainWindow打开一个QDialog(用exec())然后尝试使用右边的’关闭窗口’功能单击Windows任务栏图标的菜单(当对话框仍处于打开状态时),应用程序未按预期关闭,但没有任何反应.我也没有在QDialog或QMainWindow中获得closeEvent.
当只有QMainWindow打开时,应用程序成功关闭,我也得到一个closeEvent.
这实际上也是可重复的,例如,使用Qt Designer并打开另一个对话框,然后尝试使用“关闭窗口”功能.
任何想法如何解决这个问题?
解决方法
你所看到的行为并不令人惊讶.事实上,这正是一个(大多数)表现良好的Windows应用程序(如记事本)所发生的事情,所以我不确定我甚至称它为错误.
打开记事本,然后选择帮助 – >关于获取模式对话框.现在从任务栏图标中选择关闭.什么都没发生.
任务栏中的“关闭”将发送到主窗口,就像用户从“系统”菜单中选择“关闭”选项一样.它作为带有SC_CLOSE的WM_SYSCOMMAND到达.如果你没有明确地处理它,那么DefWindowProc将它变成一个WM_CLOSE消息,大多数主窗口都处理它.
但是,如果打开了模式对话框,则主窗口将被禁用,因此无法获取消息.
修复它的一种方法是不使用模态对话框,而是使用无模式对话框模拟模态.这将允许主窗口接收和响应消息.但对于一个小修复来说,这将是很多工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。