在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(); }
Run Code Online (Sandbox Code Playgroud)
在MyWindow
派生QMainWindow
和覆盖closeEvent(QCloseEvent*)
方法的地方,当我关闭应用程序窗口时调用此方法(例如,单击windows(x)关闭按钮),但是当我通过主菜单关闭应用程序时,不会调用它 - >"退出"或通过"CMD + Q"键快捷键.
通过浏览网页和众多问题,我得到的结论是关闭应用程序应调用所有顶级窗口的closeEvent.这不是这种情况,或者这里出了什么问题?
编辑:除了上面关闭应用程序的方法之外,还有其他我一般应该处理的实例,QApplication::quit
而不是调用窗口的close
事件吗?例如系统关闭怎么样?
在处理close
事件时,我确认用户确实想要退出,我确保清理就像写回更改的设置一样.我是否可以将清理/保存设置移到析构函数中并执行确认查询closeEvent
?
默认情况下,在Mac上,Qt将创建一个Apple菜单| 如果退出或退出条目不存在菜单栏,则退出.默认创建的条目将调用QApplication::quit()
哪个不会触发您的MyWindow::closeEvent()
.
在你的用户界面中,你应该添加一个名为Exit的菜单项(在Mac上它将自动重命名为Quit),在MyWindow
类构造函数中你应该将该动作连接到close()
插槽(继承自QWidget
).
更新 - 为了解决您的其他问题,不应该只使用析构函数来释放内存(释放文件锁等).任何可能涉及用户交互的内容(例如提示文件位置或通过QMessageBox警告用户某些内容失败)都需要进入该closeEvent
方法.保存窗口几何(以及使用QSettings的其他简单项目)也应该通过closeEvent
(尽管我已经看到在析构函数中保存几何的代码,可能会出现一些边缘情况,它会出现意外情况).
归档时间: |
|
查看次数: |
1848 次 |
最近记录: |