在OS X 10.9上,使用Qt 5.2和以下应用程序代码:
#include "mywindow.h"
#include <QApplication>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MyWindow w();
w.show();
return a.exec(); }
当MyWindow
继承自QMainWindow
并覆盖closeEvent(QCloseEvent*)
方法时,该方法会在关闭应用程序窗口(例如单击窗口(x)关闭按钮)时调用,但是当我通过主菜单 ->“退出”或通过“CMD + Q”键快捷键关闭应用程序时,它不会被调用。
从网络上查找和许多问题中,我得出的结论是关闭应用程序应该为所有顶层窗口调用closeEvent。这不是事实吗?还是这里有什么问题?
编辑:除了以上关闭应用程序的方式外,是否还有其他一般情况下需要处理的实例,这些实例将导致QApplication::quit
而不是调用窗口的close
事件?例如系统关机怎么办?
在处理close
事件时,我确认用户确实想要退出,并确保进行清理,例如写回更改后的设置。我是否应该将清理/保存设置移动到析构函数中,并在closeEvent
中进行确认查询?