• Qt中的标准对话框之QMessageBox


    1. Qt标准对话框

    • Qt为开发者提供了一些可复用的对话框类型
    • Qt提供的可复用对话框全部继承自QDialog类
    • Qt中的对话框的使用方式和QDialog完全一致

    2. 标准对话框的使用步骤

    ①定义对话框

    DialogType dlg(this) ;

    ②设置对话框属性

    dlg.setPropertyXXX(value);

    ③打开对话框(判断对话框返回值)

    dlg.exec()==DialogType::value

    ④获取对话框数据

    Type v = dlg.getDialogValue();

    ⑤处理对话框数据

    3.消息对话框

    ①用于:为用户提示重要信息,强制用户进行选择 

    ②消息对话框中的实用静态函数

      ①QMessageBox::question(…) //创建带有“是/否”按钮的消息框

      ②QMessageBox::information(…) //创建带有“确定”或“取消”按钮的消息框

      ③QMessageBox::warning(…)     //创建一个警告对话框

      ④QMessageBox::critical(…)    //创建一个严重错误对话框

      ⑤QMessageBox::about(…)       //创建“关于”对话框

    ③上述静态成员函数的返回值

    • 静态成员函数的返回值就是标准的按钮
    • 他们是枚举类型
    • 可以使用这个返回值来判断用户点击了哪个按钮

    4.实例

    ①一般步骤:

    //1、构造消息对话框对象
    
     QmessageBox msg(this);
    
    //2、设置消息对话框的属性
    
    msg.setWindowTitle("Window Title");
    msg.setText("This is a detail message dialog!");
    msg.setIcon(QMessageBox::Information);
    msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll);
    
    //3、读取对话框数据并根据返回值处理
    
    if( msg.exec() == QMessageBox::Ok )
    {
    qDebug() << "Ok button is clicked!";
    }

      

    ②实例演示

    新建一个QWidget程序

    widget.h

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    
    class Widget : public QWidget
    {
        Q_OBJECT
    private:
        QPushButton question_MsgBtn;
        QPushButton infomation_MsgBtn;
        QPushButton warning_MsgBtn;
        QPushButton critical_MsgBtn;
        QPushButton about_MsgBtn;
    
    private slots://定义为私有的槽函数,只有在类的内部可以访问
        void question_Clicked();   //小技巧:单击函数名,同时按下Alt+Enter键  选择在widght中更添加定义可以直接编写槽函数
        void infomation_Clicked();
        void warning_Clicked();
        void critical_Clicked();
        void about_Clicked();
    public:
        Widget(QWidget *parent = 0);
        ~Widget();
    };
    
    #endif // WIDGET_H
    

    widget.cpp

    #include "widget.h"
    #include <QMessageBox>
    #include <QDebug>
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent),question_MsgBtn(this),infomation_MsgBtn(this),
          warning_MsgBtn(this),critical_MsgBtn(this),about_MsgBtn(this)
    {
        question_MsgBtn.setText("question_MsgBtn Message Dialog");
        question_MsgBtn.move(20, 20);
        question_MsgBtn.resize(210, 30);
    
        infomation_MsgBtn.setText("infomation_MsgBtn Message Dialog");
        infomation_MsgBtn.move(20, 70);
        infomation_MsgBtn.resize(210, 30);
    
        warning_MsgBtn.setText("warning_MsgBtn Message Dialog");
        warning_MsgBtn.move(20, 120);
        warning_MsgBtn.resize(210, 30);
    
        critical_MsgBtn.setText("critical_MsgBtn Message Dialog");
        critical_MsgBtn.move(20, 170);
        critical_MsgBtn.resize(210, 30);
    
        about_MsgBtn.setText("about_MsgBtn Message Dialog");
        about_MsgBtn.move(20,230);
        about_MsgBtn.resize(210,30);
    
        resize(250, 290);
        setFixedSize(250, 290);
    
        connect(&question_MsgBtn,SIGNAL(clicked()),this ,SLOT(question_Clicked()));
        connect(&infomation_MsgBtn,SIGNAL(clicked()),this ,SLOT(infomation_Clicked()));
        connect(&warning_MsgBtn,SIGNAL(clicked()),this ,SLOT(warning_Clicked()));
        connect(&critical_MsgBtn,SIGNAL(clicked()),this ,SLOT(critical_Clicked()));
        connect(&about_MsgBtn,SIGNAL(clicked()),this ,SLOT(about_Clicked()));
    }
    
    Widget::~Widget()
    {
    
    }
    
    void Widget::question_Clicked()
    {
        QMessageBox msg(this);
    
        msg.setText("This is a detail message dialog!");
        msg.setIcon(QMessageBox::Question);
        msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll);
    
        switch(msg.exec()){
        case (QMessageBox::Ok) :  //判断哪个按键被按下
        {
          qDebug() << "Ok button is clicked!";
          break;
        }
    
        case (QMessageBox::Cancel) ://判断哪个按键被按下
        {
          qDebug() << "Cancel button is clicked!";
          break;
        }
    
        case QMessageBox::YesToAll : //判断哪个按键被按下
        {
          qDebug() << "YesToAll button is clicked!";
          break;
        }
    
       }
    }
    
    void Widget::infomation_Clicked()
    {
        QMessageBox msg(this);
    
        msg.setText("This is  infomation  message dialog!");
        msg.setIcon(QMessageBox::Information);
        msg.setStandardButtons(QMessageBox::Help | QMessageBox::No | QMessageBox::Yes);
    
        switch(msg.exec()){
        case (QMessageBox::Help) :  //判断哪个按键被按下
        {
          qDebug() << "Help button is clicked!";
          break;
        }
    
        case (QMessageBox::No) ://判断哪个按键被按下
        {
          qDebug() << "No button is clicked!";
          break;
        }
    
        case QMessageBox::Yes : //判断哪个按键被按下
        {
          qDebug() << "Yes button is clicked!";
          break;
        }
    
       }
    }
    
    void Widget::warning_Clicked()
    {
    //
    }
    
    void Widget::critical_Clicked()
    {
    
    }
    
    void Widget::about_Clicked()
    {
    
    }
    

     

    main.cpp

    #include "widget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.show();
    
        return a.exec();
    }

    xiaoguotu:

           

                     

  • 相关阅读:
    【NOIP2016提高A组8.12】奇袭
    【NOIP2016提高A组8.12】礼物
    tarjan算法
    【NOIP2016提高A组8.12】总结
    【NOIP2016提高A组8.11】自然数
    【NOIP2016提高A组8.12】通讯
    【NOIP2016提高A组8.11】种树
    【NOIP2016提高A组8.11】钱仓
    【NOIP2016提高组A组7.16】大鱼海棠
    【NOIP2012模拟8.20】Memory
  • 原文地址:https://www.cnblogs.com/zhaobinyouth/p/7639332.html
Copyright © 2020-2023  润新知