1. 程式人生 > >標準對話方塊(QMessageBox)

標準對話方塊(QMessageBox)

    所謂標準對話方塊,是 Qt 內建的一系列對話方塊,用於簡化開發。事實上,有很多對話方塊都是通用的,比如開啟檔案、設定顏色、列印設定等。這些對話方塊在所有程式中幾乎相同,因此沒有必要在每一個程式中都自己實現這麼一個對話方塊。
    Qt 的內建對話方塊大致分為以下幾類:
    QColorDialog:選擇顏色;
    QFileDialog:選擇檔案或者目錄;
    QFontDialog:選擇字型;
    QInputDialog:允許使用者輸入一個值,並將其值返回;
    QMessageBox:模態對話方塊,用於顯示資訊、詢問問題等;
    QPageSetupDialog
:為印表機提供紙張相關的選項;
    QPrintDialog:印表機配置;
    QPrintPreviewDialog:列印預覽;
    QProgressDialog:顯示操作過程。
    這裡我們簡單地介紹一下標準對話方塊 QMessageBox 的使用。在前面有了關於對話方塊的基礎之上,應該可以結合文件很輕鬆地學習如何使用 Qt 的標準對話方塊。
    QMessageBox 用於顯示訊息提示。我們一般會使用其提供的幾個 static 函式:
    void about(QWidget * parent, const QString & title, const QString & text):顯示關於對話方塊。這是一個最簡單的對話方塊,其標題是 title,內容是 text,父視窗是 parent。對話方塊只有一個 OK 按鈕

    void aboutQt(QWidget * parent, const QString & title = QString()):顯示關於 Qt對話方塊。該對話方塊用於顯示有關 Qt 的資訊

    StandardButton critical(QWidget * parent, const QString & title, const QString& text, StandardButtons buttons = Ok, StandardButton defaultButton =NoButton):顯示嚴重錯誤對話方塊。這個對話方塊將顯示一個紅色的錯誤符號

。我們可以通過 buttons 引數指明其顯示的按鈕。預設情況下只有一個 Ok 按鈕,我們可以使用 StandardButtons 型別指定多種按鈕。

    StandardButton information(QWidget * parent, const QString & title, constQString & text, StandardButtons buttons = Ok, StandardButton defaultButton =NoButton): QMessageBox::information()函式和QMessageBox::critical()類似,不同之處在於這個對話方塊提供一個普通訊息圖示
    StandardButton question(QWidget * parent, const QString & title, const QString& text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButtondefaultButton = NoButton): QMessageBox::question()函式與
QMessageBox::critical()類似,不同之處在於這個對話方塊提供一個問號圖示,並且其顯示的按鈕是“是”和“否”兩個
    StandardButton warning(QWidget * parent, const QString & title, const QString& text, StandardButtons buttons = Ok, StandardButton defaultButton =NoButton): QMessageBox::warning()函式與 QMessageBox::critical()類似,不同之處在於這個對話方塊提供一個黃色歎號圖示
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QMessageBox>
class MainWindow : public QMainWindow
{
    Q_OBJECT
private slots:
    void click();
private:
    QPushButton *btn;
    QMessageBox *msg;
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle("呵呵");
    this->setMinimumSize(300,300);
    btn=new QPushButton(this);
    btn->setText(tr("哈哈"));
    btn->move(100,100);
    connect(btn,&QPushButton::clicked,this,&MainWindow::click);//定義槽函式
}
void MainWindow::click(){
    /*
     * msgBox 是一個建立在棧上的 QMessageBox 例項。我們設定其標題為“檔案已經被修改”,
     * setInformativeText 則是會在對話方塊中顯示的文字。下面我們使用了一個 detailedText,
     * 也就是詳細資訊,當我們點選了詳細資訊按鈕時,對話方塊可以自動顯示更多資訊。我們自己定義的
     * 對話方塊的按鈕有三個:儲存、丟棄和取消。然後我們使用了 exec() 是其成為一個模態對話方塊,
     * 根據其返回值進行相應的操作。
    */
    msg=new QMessageBox(this);
    msg->setWindowTitle("標準對話方塊");
    msg->setText(tr("檔案已經被修改"));
    msg->setInformativeText(tr("你想儲存嗎?"));
    msg->setDetailedText(tr("呵呵"));
    msg->setStandardButtons(QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel);
    msg->setDefaultButton(QMessageBox::Save);//預設選中的按鈕,高亮顯示
    int ret=msg->exec();
    switch (ret) {
    case QMessageBox::Save:
        qDebug()<<"儲存";//資料傳輸到控制檯顯示
        break;
    case QMessageBox::Discard:
        qDebug()<<"丟棄";
        break;
    case QMessageBox::Cancel:
        qDebug()<<"取消";
        break;
    }
}
MainWindow::~MainWindow()
{

}