消息框(QMessageBox)

程式中常出現一些簡短的訊息方塊,在Qt裡為QMessageBox,這邊示範了五種形式的消息框,分別為問題、資訊、警告、重要、關於消息框,點擊按鍵,即可跳出相對應的消息框。

QMessageBox有五個參數:

  1. 第一個參數說明它的父組件。
  2. 第二個參數是對話框的標題。
  3. 第三個參數是對話框顯示的內容。
  4. 第四個參數聲明對話框放置的按鈕,默認是只放置一個OK按鈕,假如我們希望有一個Yes和一個No的按鈕,可以使用QMessageBox::Yes | QMessageBox::No。
  5. 第五個參數設定對話框預設選中的按鍵,預設為不選中任何按鍵。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QVBoxLayout>
#include <QPushButton>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
private:
    QPushButton *questionBtn;
    QPushButton *informationBtn;
    QPushButton *warningBtn;
    QPushButton *criticalBtn;
    QPushButton *aboutBtn;
    QVBoxLayout *mainLayout;
private slots:
    void showQuestionMsg();
    void showInformationMsg();
    void showWarningMsg();
    void showCriticalMsg();
    void showAboutMsg();
};

#endif 

dialog.cpp

#include "dialog.h"
#include<QMessageBox>

Dialog::Dialog(QWidget *parent) : 
    QDialog(parent)
{
    setWindowTitle(QStringLiteral("消息對話框"));
    questionBtn = new QPushButton;
    questionBtn->setText(tr("問題消息框"));
    informationBtn =new QPushButton;
    informationBtn->setText(tr("資訊消息框"));
    warningBtn = new QPushButton;
    warningBtn->setText(tr("警告消息框"));
    criticalBtn = new QPushButton;
    criticalBtn->setText(tr("重要消息框"));
    aboutBtn =new QPushButton;
    aboutBtn->setText(tr("關於消息框"));

    mainLayout =new QVBoxLayout(this);
    mainLayout->addWidget(questionBtn);
    mainLayout->addWidget(informationBtn);
    mainLayout->addWidget(warningBtn);
    mainLayout->addWidget(criticalBtn);
    mainLayout->addWidget(aboutBtn);

    connect(questionBtn,SIGNAL(clicked()),this,SLOT(showQuestionMsg()));
    connect(informationBtn,SIGNAL(clicked()),this,SLOT(showInformationMsg()));
    connect(warningBtn,SIGNAL(clicked()),this,SLOT(showWarningMsg()));
    connect(criticalBtn,SIGNAL(clicked()),this,SLOT(showCriticalMsg()));
    connect(aboutBtn,SIGNAL(clicked()),this,SLOT(showAboutMsg()));
}

void Dialog::showQuestionMsg(){
    QMessageBox::question(this,tr("消息框"),tr("這是問題消息框"),QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok);
}

void Dialog::showInformationMsg(){
    QMessageBox::information(this,tr("消息框"),tr("這是資訊消息框"));
}

void Dialog::showWarningMsg(){
    QMessageBox::warning(this,tr("消息框"),tr("這是警告消息框"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save);
}

void Dialog::showCriticalMsg(){
    QMessageBox::critical(this,tr("消息框"),tr("這是重要消息框"));
}

void Dialog::showAboutMsg(){
    QMessageBox::about(this,tr("消息框"),tr("這是關於消息框"));
}

main.cpp

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.resize(200,120);
    w.show();

    return a.exec();
}

QMessageBox

QMessageBox

QMessageBox

QMessageBox

QMessageBox

QMessageBox


QMessageBox除了可從建構式設定性質,也可以逐步設定。

QMessageBox msgBox;
msgBox.setWindowTitle(tr("消息框"));        
msgBox.setText(tr("本文訊息"));        //標題
msgBox.setInformativeText(tr("內容")); //內容說明
msgBox.setStandardButtons(QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);

我們可以用以下的switch/case方式,在消息框跳出後,依照使用者按下的按鍵,做出不同的回應。

switch(QMessageBox::warning(NULL,tr("消息框"),tr("這是警告消息框"),QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save)){
    case QMessageBox::Save:
        //按下儲存鍵後的處理
        break;
    case QMessageBox::Discard:
        //按下放棄鍵後的處理
        break;
    case QMessageBox::Cancel:
        //按下取消鍵後的處理
        break;
    default:
        break;
}