Qt主窗口关闭事件Mac Cmd+Q
Qt MainWindow CloseEvent Mac Cmd+Q
在带有Qt 5.2和以下应用程序代码的OS X 10.9上
#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*)
方法,当我关闭应用程序窗口时(例如单击windows(x)关闭按钮)会调用此方法,但当我通过主菜单->"退出"或"CMD+Q"快捷键关闭应用程序时不会调用此方法。
从浏览网页和众多问题中,我得到的印象是关闭应用程序应该调用所有顶级窗口的closeEvent。事实并非如此,还是这里出了问题?
编辑:除了上述关闭应用程序的方法外,我通常还应该处理其他会导致QApplication::quit
而不是调用窗口的close
事件的实例吗?例如,系统关闭怎么办?
在处理close
事件时,我确认用户确实想退出,并确保正在进行诸如写回更改的设置之类的清理。我是否应该将清理/保存设置移到析构函数中,并在closeEvent
中进行确认查询?
默认情况下,在Mac上,如果不存在包含退出或退出项的菜单栏,Qt将创建一个Apple菜单|退出。默认创建的条目将调用QApplication::quit()
,而不会触发您的MyWindow::closeEvent()
。
在您的UI中,您应该添加一个名为Exit的菜单项(在Mac上,它将自动重命名为Quit),并且在MyWindow
类构造函数中,您应将该操作连接到close()
插槽(继承自QWidget
)。
更新-为了解决您的其他问题,析构函数可能只用于释放内存(释放文件锁等)。任何可能涉及用户交互的内容(如提示文件位置或通过QMessageBox提醒用户发生故障)都需要进入closeEvent
方法。保存窗口几何图形(以及其他使用QSettings的简单项目)也应该通过closeEvent
完成(尽管,我已经看到在析构函数中保存几何图形的代码,可能存在一些边缘情况,它会做一些意想不到的事情)。
- Android NDK传感器向事件队列报告奇怪的间隔
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 处理闪烁窗口事件
- C++Builder中的OnClick事件签名存在问题
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何使用Clang/GCC在Mac上为C/C++设置VSCode
- 跟踪滚动条上的鼠标事件
- 什么是事件表 (wxWidgets)?
- wxFrame 和 wxTaskBarIcon 任务栏事件 Mac OSX:未触发回调
- 网络更改事件注册在 MAC OS X 10.7 (Lion) 中失败
- 在C或c++ (mac OSX)中有KeyDown事件
- 如何用c++捕捉MAC操作系统中的鼠标事件
- 在Mac上处理来自主机应用的Apple事件
- 在Mac上寻找C++的关键事件库
- Qt主窗口关闭事件Mac Cmd+Q
- 在Linux和Mac上处理可移动媒体USB/CD-ROM装载/umount事件