mainwindow单击关闭按钮不会触发关闭操作,它只是退出

Qt
0 56
suoniao 2020-10-20
需要:0索币

它确实为应用程序发出了aboutToQuit(),我可以用它在窗口关闭后“恢复”它.但是我想在最初结束之前发出警告.

我不确定问题出在哪里.窗口是顶级的,没有正在运行的线程.我是否误解了实际连接到按钮点击的信号…?它很近(),对吗?

在您的mainwindow类头中(closeEvent必须是虚拟的):

public:
    /*!
     * \brief closeEvent
     * \param event
     */
    virtual void closeEvent ( QCloseEvent * event );

然后在cpp

void MainWindow::closeEvent( QCloseEvent *event )
{
    //! Ignore the event by default.. otherwise the window will be closed always.
    event->ignore();

    if(!EntitiesSaverObserver::Instance()->isAllSaved())
    {
        QMessageBox msgBox;
        msgBox.setWindowIcon(QIcon(":/Resources/Icons/warning.png"));
        msgBox.setIconPixmap(QPixmap(":/Resources/Icons/warning.png"));
        QString strToShow = QString("Some Entities has been created or modified...");
        msgBox.setText(strToShow);
        msgBox.setInformativeText("Do you want to save your changes?");
        msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
        msgBox.setDefaultButton(QMessageBox::Save);
        int ret = msgBox.exec();

        switch (ret) {
          case QMessageBox::Save:
            {
              // Save was clicked
              qDebug() << "SAVE";
              //! Do your stuff here
              // ....
              event->accept();
              break;
            }
          case QMessageBox::Discard:
            {
                // Don't Save was clicked
                qDebug() << "DISCARD";
                event->accept();
                break;
            }
          case QMessageBox::Cancel:
            {
              // Cancel was clicked
              qDebug() << "CANCEL";
              break;
            }
          default:
              // should never be reached
              break;
        }
    } else {
        event->accept(); // Do not need to save nothing... accept the event and close the app
    }
}

此外,如果您想在工具栏中放置一个按钮作为QAction,您可以连接信号,然后:

void MainWindow::on_actionExit_triggered()
{
    close();
}

这将调用主窗口的关闭事件.我希望这可以帮助你.

回帖
  • 消灭零回复
广告一下
程序员转型,副业赚钱教程
相关主题
Qt实战分布式网盘系统实战Qt文件上传下载 0
Qt5实战教程之翻金币游戏开发 0
利用C++库QT实现秘钥分发系统 秘钥协商 校验 查看服务 0
Qt开发物联网智能网关项目教程 0
Qt开发打地鼠游戏实战 QT学生管理系统实战教程 0
socket notifiers cannot be enabled from another thread错误 0
QProcess::startDetached("cmd.exe")不显示控制台窗口 0
Qt的半自动化内存管理 0
Qt智能指针则可以在退出作用域时智能指针则可以在退出作用域时 0
Qt垃圾回收机制QObjectCleanupHandler 0
QT中建议不要直接Delete掉一个QObject使用deleteLater()函数 0
未找到文件qmlcache_loader.cpp QT编译release版本的时候报错 0
Qt5.12.4requested database does not belong to the calling thread 0
构建Qt界面的工具栏,主要用到QToolBar类 0
QToolButton详细使用图解教程 给主界面添加图标和文字 0
Qt利用QClipboard复制hello suoniao到剪贴板 0
Qt剪切板复制图片和文本的方法将QImage格式复制到剪贴板,QPixmap要比QImage慢 0
QT 提供了QSystemTrayIcon类用于实现程序的托盘。QT提供了托盘示例 0
mainwindow单击关闭按钮不会触发关闭操作,它只是退出 0
addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed 0
相关主题
Qt实战分布式网盘系统实战Qt文件上传下载 0
Qt5实战教程之翻金币游戏开发 0
利用C++库QT实现秘钥分发系统 秘钥协商 校验 查看服务 0
最新C++入门到实战教程 c++实现计算器和QQ登录框 0
Qt开发物联网智能网关项目教程 0
Qt开发打地鼠游戏实战 QT学生管理系统实战教程 0
大龄程序员转型、程序员副业赚钱实战教程合集 0
程序员副业赚钱之抖音短视频制作实战教程 0
程序员副业赚钱之程序员投资赚钱实战教程 0
程序员副业赚钱之利用抖音短视频获取收入实战 0
程序员副业赚钱之抖音电商实战教程 0
程序员副业赚钱之利用豆瓣引流赚钱实战 0
程序员副业赚钱之抓住自媒体风口月入过万不是问题今日头条实战 0
程序员副业赚钱之靠搬运视频赚钱实战 0
程序员副业赚钱之靠写作技术文章实现收益 写作教程 0
程序员副业赚钱之利用知乎引流实现月入过万实战 0
程序员副业赚钱之利用个人IP打造月入5万项目 0
程序员副业赚钱之利用社群营销 打造躺赚个人号 0
程序员副业赚钱之靠运行公众号月入10万多哦 0
程序员副业赚钱之打造一个赚钱的快手号 0