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

Rob*_*ert 5 windows qt qt5

使用Qt 5.3.0和Windows 8.1:

不知道我是否遗漏了某些东西,或者这是否是Qt中的疏忽,但当我只是有一个QMainWindow打开一个QDialog(用exec())然后尝试使用右边的'关闭窗口'功能单击Windows任务栏图标的菜单(当对话框仍处于打开状态时),应用程序未按预期关闭,但没有任何反应.我也没有在QDialog或QMainWindow中获得closeEvent.

当只有QMainWindow打开时,应用程序成功关闭,我也得到一个closeEvent.

当使用Qt Designer并打开另一个对话框然后尝试使用"关闭窗口"功能时,这实际上也是可重现的.

任何想法如何解决这个问题?

Adr*_*thy 5

你所看到的行为并不令人惊讶.事实上,这正是一个(大多数)表现良好的Windows应用程序(如记事本)所发生的事情,所以我不确定我甚至称它为错误.

打开记事本,然后选择帮助 - >关于获取模态对话框.现在从任务栏图标中选择关闭.什么都没发生.

任务栏中的"关闭"将发送到主窗口,就像用户从"系统"菜单中选择"关闭"选项一样.它作为带有SC_CLOSE的WM_SYSCOMMAND到达.如果你没有明确地处理它,那么DefWindowProc将它变成一个WM_CLOSE消息,大多数主窗口都处理它.

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

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

  • 从可用性的角度来看这有点不幸但是根据你的解释是有意义的,至少我可以指出本地应用程序的行为相同,万一有人抱怨:) (2认同)