zoukankan      html  css  js  c++  java
  • Qt中窗口退出事件

    窗口右上角的X按键会导致其在不给出任何提示的情况下直接退出,
    当点击右上角的x按键时,会触发Qt中的一个事件处理函数:void QWidget::closeEvent ( QCloseEvent * e ),默认情况该函数无任何提示性消息,如果需提示则需要重写该函数

    void Dialog::closeEvent ( QCloseEvent * e )
    {
        if( QMessageBox::question(this,
                                 tr("Quit"),
                                 tr("Are you sure to quit this application?"),
                                  QMessageBox::Yes, QMessageBox::No )
                       == QMessageBox::Yes){
            e->accept();//不会将事件传递给组件的父组件
    
            qDebug()<<"ok";
        }
        else
          e->ignore();
    }
    
    

    说明:

    • 事件的ignore函数表示忽略事件,将其传到父组件进行处理
    • 事件的accept函数表示接受事件,组件自己进行处理,不会将事件传递给父组件
    • 但是在这个closeEvent函数中,这两个函数尤其不一样的理解:对于窗口关闭QCloseEvent事件,
      • 调用accept()意味着 Qt 会停止事件的传播,窗口关闭;
      • 调用ignore()则意味着事件继续传播,即阻止窗口关闭。

    此外如果需要直接退出某个应用程序,可以直接调用Qt中的一个全局指针:qApp ,全局指针qApp指向全局的QApplication对象。
    在需要停止程序运行的位置直接加入如下代码

    #include <QtGui/QApplication>
    ...
      qApp->quit();
    

    说明:

    • qApp是一个全局的函数,可以在Qt说明文档中直接找到,不是main函数定义的QApplication对象(QApplication对象也可以退出,使用 app->exit(0);或者 app->quit();具体可以参考【1】)
    • qApp->quit()关闭的是整个应用程序,不只是窗口,
    • 一般情况下关闭窗口应用程序会直接退出,如果要求关闭窗口时,应用程序不退出,则需要设置QApplication的属性:
    QApplication::setQuitOnLastWindowClosed(false);
    

    参考:
    【1】https://blog.csdn.net/owen7500/article/details/50330697
    【2】https://www.devbean.net/2012/09/qt-study-road-2-events-accept-reject/

  • 相关阅读:
    再叙存储设备
    分布式文件系统---测试
    分布式文件系统
    Solr 分布式(复制)配置--成功验证
    搜索服务之离线处理思路
    我为公司做的总体架构,欢迎提建议
    python的面向对象
    python异常处理
    迭代器和生成器
    python函数
  • 原文地址:https://www.cnblogs.com/zhaobinyouth/p/9478010.html
Copyright © 2011-2022 走看看