加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – Qt MainWindow CloseEvent Mac Cmd Q.

发布时间:2020-12-16 03:34:36 所属栏目:百科 来源:网络整理
导读:在OS X 10.9上使用Qt 5.2和以下应用程序代码 #include "mywindow.h"#include QApplicationint main(int argc,char *argv[]) { QApplication a(argc,argv); MyWindow w(); w.show(); return a.exec(); } MyWindow从QMainWindow派生并覆盖closeEvent(QCloseEve
在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 *)方法,当我关闭应用程序窗口时调用此方法(例如单击windows(x)关闭按钮),但是当我通过main关闭应用程序时不会调用它菜单 – > “退出”或通过“CMD Q”键快捷键.

通过浏览网页和众多问题,我得到的结论是关闭应用程序应调用所有顶级窗口的closeEvent.这不是这种情况,或者这里出了什么问题?

编辑:除了上面关闭应用程序的方法之外,还有其他我一般应该处理的实例会导致QApplication :: quit而不是调用窗口的close事件吗?例如系统关闭怎么样?

在处理一个关闭事件时,我确认用户确实想要退出,我确保清理就像写回更改的设置一样.我是否应该将清理/保存设置移到析构函数中并在closeEvent中执行确认查询?

解决方法

默认情况下,在Mac上,Qt will create an Apple Menu | Quit if a menubar doesn’t exist with either quit or exit entry.默认创建的条目将调用 QApplication::quit(),这将不会触发您的MyWindow :: closeEvent().

在您的UI中,您应该添加一个名为Exit的菜单项(在Mac上它将自动重命名为Quit),在MyWindow类构造函数中,您应该将该操作连接到close()插槽(从QWidget继承).

更新 – 为了解决您的其他问题,不应该只使用析构函数来释放内存(释放文件锁等).任何可能涉及用户交互的事情(例如提示文件位置或通过QMessageBox警告用户某些事情失败)都需要进入closeEvent方法.保存窗口几何(以及使用QSettings的其他简单项目)也应该通过closeEvent来完成(但是,我已经看到了在析构函数中保存几何的代码,可能会出现一些边缘情况,它会出现意外情况).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读