Qt窗口控件之消息对话框QMessageBox

消息对话框QMessageBox

QMessageBox 是继承于 QDialog 类,用于表示 Qt 中的一个消息对话框。消息对话框是应用程序中最常用的界面元素,主要用于为用户提示重要信息,强制用户进行选择操作。

1. QMessageBox方法

方法 说明
setWindowTitle(QString) 设置消息对话框标题文本。
setText(QString) 设置消息对话框内容文本。
setStandardButtons() 添加 Qt 内置的标准按钮。QMessageBox::Save 为保存,这些枚举类型的值会作为 exec() 的返回值返回给主窗口。
addButton(QAbstractButton*, ButtonRole) 添加自定义按钮。第二个参数为按钮的作用,QMessageBox::AcceptRole 为接受,值为 0 。这些值会作为 exec() 的返回值返回。
setIcon() 设置消息对话框的图标。

ButtonRole的值:

Qt窗口控件之消息对话框QMessageBox_第1张图片


QMessageBox的静态函数

QMessageBox 还有几个简单快捷的静态函数用于快速生成对话框,由于消息对话框的注意功能就是返回用户选择的消息,所以可以使用这些静态函数简单生成:

QMessageBox::StandardButton QMessageBox::information(QWidget *parent, const QString &title, const QString &text,QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)

parent 传入 this 或其他父窗口。

title 为消息对话框的标题。

text 为消息对话框的内容文本。

buttons 为 Qt 内容的标准按钮。

示例:

int result = QMessageBox::information(this, "这是一个消息对话框", "这是消息对话框文本",QMessageBox::Ok|QMessageBox::Cancel)
静态函数 说明
QMessageBox::information() 报告正常运行信息。
QMessageBox::question() 用于正常操作过程中的提问。
QMessageBox::warning() 用于报告非关键错误。
QMessageBox::critical() 用于报告严重错误。

Qt窗口控件之消息对话框QMessageBox_第2张图片

2. 使用QMessageBox弹出一个消息对话框

因为消息对话框基本在使用中都是使用模态的,模态的窗口会阻塞主窗口,所以也可以使用 delete 析构对话框:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    QMessageBox* message=new QMessageBox(this);
    message->setWindowTitle("这是一个消息对话框");
    message->setText("这是消息对话框内容");
    message->setStandardButtons(QMessageBox::Save |QMessageBox::No|QMessageBox::Cancel);
    message->setIcon(QMessageBox::Warning);

    message->exec();//弹出模态消息对话框

    //delete message;//因为模态对话框会阻塞主窗口,这里可以使用delete析构
    message->setAttribute(Qt::WA_DeleteOnClose);
}

Qt窗口控件之消息对话框QMessageBox_第3张图片

3. QMessageBox接收对话框返回值

QMessageBox->exec() 是会将用户的操作作为返回值返回的,我们可以获取该返回值自定义不同的操作,注意右上角的 × 号默认是 QMessageBox::RejectRole

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
#include 

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QMessageBox* message=new QMessageBox(this);
    message->setWindowTitle("这是一个消息对话框");
    message->setText("这是消息对话框内容");

    message->setIcon(QMessageBox::Warning);

    QPushButton* button1=new QPushButton("确定");
    message->addButton(button1,QMessageBox::AcceptRole);
    QPushButton* button2=new QPushButton("取消");
    message->addButton(button2,QMessageBox::RejectRole);

    int result=message->exec();
    if(result==QMessageBox::AcceptRole)
    {
        qDebug()<<"确定";
    }
    else if(result==QMessageBox::RejectRole)
    {
        qDebug()<<"取消";
    }

    message->setAttribute(Qt::WA_DeleteOnClose);
}

Qt窗口控件之消息对话框QMessageBox_第4张图片

你可能感兴趣的:(qt,c++,qt6.3,qt5,前端)