如何对Windows中任务栏的右键菜单中的“关闭窗口”做出反应

使用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消息,大多数主窗口都处理它.

但是,如果打开了模式对话框,则主窗口将被禁用,因此无法获取消息.

修复它的一种方法是不使用模态对话框,而是使用无模式对话框模拟模态.这将允许主窗口接收和响应消息.但对于一个小修复来说,这将是很多工作.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...