亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt QMessageBox類使用教程

 更新時間:2021年12月01日 10:10:27   投稿:newname  
QMessageBox類提供一個模態(tài)對話框,用于通知用戶或詢問用戶一個問題并接收答案。這篇文章主要介紹了QMessageBox的一些常用用法,需要的小伙伴快來學(xué)習(xí)一下

前言

QMessageBox 是 Qt 框架中常用的一個類,可以生成各式各樣、各種用途的消息對話框,如圖 1 所示。

圖 1 QMessageBox消息對話框

很多 GUI 程序都會用到消息對話框,且很多場景中使用的消息對話框是類似的,唯一的區(qū)別只是提示信息不同。為了提高程序員的開發(fā)效率,避免重復(fù)地“造輪子”,Qt 開發(fā)者設(shè)計好了幾種通用的 QMessageBox 消息對話框,需要時可以直接使用。

通用的QMessageBox消息框

Qt 提供了 6 種通用的 QMessageBox 消息對話框,通過調(diào)用 QMessageBox 類中的 6 個靜態(tài)成員方法,可以直接在項目中使用它們。

1) information消息對話框

information 對話框常用于給用戶提示一些關(guān)鍵的信息,它的外觀如下圖所示:

圖 2 information 消息對話框

在項目中使用 information 消息對話框,直接調(diào)用 QMessageBox 類中的 information() 靜態(tài)成員方法即可,該方法的語法格式如下:

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

各個參數(shù)的含義是:

  • parent:指定消息對話框的父窗口,消息提示框會作為一個獨立的窗口顯示在父窗口的前面。消息提示框從彈出到關(guān)閉的整個過程中,用戶無法操作父窗口,更不能刪除父窗口;
  • title:指定消息對話框的標(biāo)題,即圖 2 中的 Titile;
  • text:指定消息對話框的具體內(nèi)容,即圖 2 中的 text;
  • buttons:指定消息對話框中包含的按鈕。默認(rèn)情況下,消息對話框只包含一個按鈕,即圖 2 中顯示的 "OK" 按鈕。根據(jù)需要,我們可以用|按位或運算符在消息對話框中設(shè)置多個按鈕,例如 QMessageBox::Ok|QMessageBox::Cancel;
  • defaultButton:指定 Enter 回車鍵對應(yīng)的按鈕,用戶按下回車鍵時就等同于按下此按鈕。注意,defaultButton 參數(shù)的值必須是 buttons 中包含的按鈕,當(dāng)然也可以不手動指定,QMessageBox 會自動從 buttons 中選擇合適的按鈕作為 defaultButton 的值。

information() 函數(shù)會返回用戶按下的按鈕。StandardButton 是 QMessageBox 類中定義的枚舉類型,每個枚舉值代表一種按鈕。StandardButton 類型中的值有很多,下表給大家羅列了幾個常用的:

表 1 QMessageBox::StandardButton 枚舉類型值

枚舉值 含 義
QMessageBox::Ok 標(biāo)有 "OK" 字樣的按鈕,通常用來表示用戶接受或同意提示框中顯示的信息。
QMessageBox::Open 標(biāo)有 "Open" 字樣的按鈕。
QMessageBox::Save 標(biāo)有 "Save" 字樣的按鈕。
QMessageBox::Cancel 標(biāo)有 "Cancel" 字樣的按鈕。點擊此按鈕,通常表示用戶拒絕接受提示框中顯示的信息。
QMessageBox::Close 標(biāo)有 "Close" 字樣的按鈕。
QMessageBox::Discard 標(biāo)有 "Discard" 或者 "Don't Save" 字樣的按鈕,取決于運行平臺。
QMessageBox::Apply 標(biāo)有 "Apply" 字樣的按鈕。
QMessageBox::Reset 標(biāo)有 "Reset" 字樣的按鈕。
QMessageBox::Yes 標(biāo)有 "Yes" 字樣的按鈕。
QMessageBox::No 標(biāo)有 "No" 字樣的按鈕。

例如,使用 information() 函數(shù)實現(xiàn)圖 2 所示的對話框,實現(xiàn)代碼為:

QMessageBox::StandardButton result = QMessageBox::information(&widget, "Title","text");

其中,widget 是我們創(chuàng)建好的 QWidget 窗口,創(chuàng)建好的 information 對話框會顯示在 widget 窗口的前面。通過用 result 接收 information() 函數(shù)的返回值,我們可以得知用戶選擇的是哪個按鈕。

2) critical消息對話框

critical 消息對話框常用于給用戶提示“操作錯誤”或“運行失敗”的信息,它的外觀如下圖所示:

圖 3 critical 消息對話框

項目中使用 critical 消息對話框,直接調(diào)用 QMessageBox 類提供的 critical() 靜態(tài)成員方法即可,該方法的語法格式為:

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

各個參數(shù)的含義以及返回值的含義,都與 information() 函數(shù)相同,這里不再重復(fù)贅述。

例如,使用 critical() 函數(shù)實現(xiàn)圖 3 所示的對話框,實現(xiàn)代碼為:

QMessageBox::StandardButton result=QMessageBox::critical(&widget, "Title","text");

其中,widget 是我們創(chuàng)建好的 QWidget 窗口,創(chuàng)建好的 critical 對話框會顯示在 widget 窗口的前面。

3) question消息對話框

question 對話框常用于向用戶提出問題并接收用戶的答案,它的外觀如下圖所示:

圖 4 question消息對話框

項目中使用 question 對話框,可以直接調(diào)用 QMessageBox 類的 question() 靜態(tài)成員方法,該方法的語法格式為:

StandardButton QMessageBox::question(QWidget *parent,
                                     const QString &title,
                                     const QString &text,
                                     StandardButtons buttons = StandardButtons( Yes | No ),
                                     StandardButton defaultButton = NoButton)

各個參數(shù)的含義以及返回值的含義,都與 information() 函數(shù)相同。

例如,使用 question() 函數(shù)實現(xiàn)圖 4 所示的對話框,實現(xiàn)代碼為:

QMessageBox::StandardButton result=QMessageBox::question(&widget, "Title","text");

其中,widget 是我們創(chuàng)建好的 QWidget 窗口,創(chuàng)建好的 question 對話框會顯示在 widget 窗口的前面。

4) warning消息對話框

warining 對話框常用于向用戶顯示一些警告信息,它的外觀如下圖所示:

圖 5 warning消息對話框

項目中使用 warning 對話框,可以直接調(diào)用 QMessageBox 類的 warning() 靜態(tài)成員方法,該方法的語法格式為:

StandardButton QMessageBox::warning(QWidget *parent,

                                    const QString &title,

                                    const QString &text,

                                    StandardButtons buttons = Ok,

                                    StandardButton defaultButton = NoButton)

各個參數(shù)的含義以及返回值的含義,都與 information() 函數(shù)相同。

例如,使用 warning() 函數(shù)實現(xiàn)圖 5 所示的對話框,實現(xiàn)代碼為:

QMessageBox::StandardButton result=QMessageBox::warning(&widget, "Title","text");

其中,widget 是我們創(chuàng)建好的 QWidget 窗口,創(chuàng)建好的 warning 對話框會顯示在 widget 窗口的前面。

5) about和aboutQt對話框

about 對話框常常作為介紹某個產(chǎn)品或某項功能的臨時窗口,它的外觀如下圖所示:

圖 6 about消息對話框

注意,about 對話框沒有固定的圖標(biāo),它顯示的圖標(biāo)可能來自父窗口、包含父窗口的頂層窗口等,也可能使用和 information 對話框相同的圖標(biāo)。

項目中使用 about 對話框,直接調(diào)用 QMessageBox 類提供的 about() 靜態(tài)成員方法即可,該方法的語法格式如下:

void QMessageBox::about(QWidget *parent, const QString &title, const QString &text)

各個參數(shù)的含義和與 information() 函數(shù)相同。和前面的幾種對話框不同,about對話框中只包含一個默認(rèn)的 Ok 按鈕,且 about() 函數(shù)沒有返回值。

aboutQt 可以看做是 about 對話框的一個具體實例,它只能顯示 Qt 的介紹信息,如下圖所示:

圖 7 aboutQt對話框

項目中使用 aboutQt 對話框,直接調(diào)用 QMessageBox 類提供的 aboutQt() 靜態(tài)成員方法即可,該函數(shù)的語法格式如下:

void QMessageBox::aboutQt(QWidget *parent, const QString &title = QString())

我們只能設(shè)置 aboutQt 對話框的 parent 父窗口和 title 標(biāo)題,不能自定義它的內(nèi)容。所以在實際場景中,aboutQt() 對話框很少使用。

自定義QMessageBox對話框

以上 6 種通用的 QMessageBox 對話框,界面上的圖片無法修改,按鈕上的文字也無法修改(例如無法將 OK、No 改成中文)。如果想修改它們,就需要自定義一個 QMessageBox 對話框。

QMessageBox對話框的創(chuàng)建

程序中創(chuàng)建 QMessageBox 對象,必須先引入<QMessageBox>頭文件。QMessageBox 類提供了兩個構(gòu)造函數(shù),分別是:

QMessageBox::QMessageBox(QWidget *parent = Q_NULLPTR)
QMessageBox::QMessageBox(Icon icon,
                         const QString &title,
                         const QString &text,
                         StandardButtons buttons = NoButton,
                         QWidget *parent = Q_NULLPTR,
                         Qt::WindowFlags f = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint)

第一個構(gòu)造函數(shù)可以創(chuàng)建一個“空白”對話框,即對話框中不包含任何文本和按鈕。當(dāng)然,通過調(diào)用 QMessageBox 類提供的成員方法,可以向“空白”對話框中添加各種元素(圖標(biāo)、文本、按鈕等)。

第二個構(gòu)造函數(shù)中,各個參數(shù)的含義是:

  • icon:指定對話框中的圖片。Icon 是 QMessageBox 類中定義的枚舉類型,內(nèi)部包含 QMessageBox::NoIcon、QMessageBox::Question、QMessageBox::Information、QMessageBox::Warning、QMessageBox::Critical 幾個值,分別表示:不指定圖片、question對話框的圖片(圖 4)、information對話框的圖片(圖 2)、warning對話框的圖片(圖 5)、critical對話框的圖片(圖 3)。
  • title:指定對話框的標(biāo)題;
  • text:指定對話框中顯示的文本信息;
  • buttons:指定對話框中包含的的按鈕,可選值如表 1 所示。
  • parent:指定對話框的父窗口;
  • f:指定對話框的屬性。WindowFlags 是 Qt 提供的枚舉類型,內(nèi)部包含的值有很多,有的用來指定對話框的用途(比如 Qt::Dialog 表示對話框窗口),有的用來指定對話框的外觀(比如 MSWindowsFixedSizeDialogHint 表示給對話框添加一個細(xì)的邊框)

?舉個簡單的例子:

#include <QApplication>
#include <QMessageBox>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //創(chuàng)建 QMessageBox 類對象
    QMessageBox MyBox(QMessageBox::Question,"Title","text",QMessageBox::Yes|QMessageBox::No);
    //使 MyBox 對話框顯示
    MyBox.exec();
    return a.exec();
}

程序中創(chuàng)建了一個 MyBox 對話框,通過調(diào)用 QMessageBox 提供的 exec() 方法,可以使 MyBox 對話框彈出。運行程序可以發(fā)現(xiàn),MyBox 對話框的外觀和圖 4 的 question 對話框完全一樣。

QMessageBox對話框的使用

QMessageBox 類提供了很多功能實用的成員方法,方便我們快速地制作出實際場景需要的對話框。

下表給大家羅列了常用的一些 QMessageBox 類成員方法:

表 2 QMessageBox 常用成員方法

成員方法 功 能
void QMessageBox::setWindowTitle(const QString &title) 設(shè)置對話框的標(biāo)題。
void setText(const QString &text) 設(shè)置對話框中要顯示的文本。
void setIconPixmap(const QPixmap &pixmap) 設(shè)置對話框中使用的圖片。
QAbstractButton *QMessageBox::clickedButton() const 返回用戶點擊的按鈕。
QPushButton *QMessageBox::addButton(const QString &text, ButtonRole role) 向?qū)υ捒蛑刑砑影粹o,text 為按鈕的文本,role 是 QMessageBox::ButtonRole 枚舉類型的變量,用于描述按鈕扮演的角色,它的可選值有?QMessageBox::AcceptRole(同 OK 按鈕)、QMessageBox::RejectRole(同 Cancel 按鈕)等。
int QMessageBox::exec() 使當(dāng)前對話框彈出,除非用戶關(guān)閉對話框,否則對話框?qū)⒁恢贝嬖?。此外,?dāng)對話框中使用的都是 Qt 提供的按鈕時,該方法可以監(jiān)聽用戶點擊的是哪個按鈕,并將該按鈕對應(yīng)的枚舉值返回;如果對話框中包含自定義按鈕,需要借助 clickedButton() 方法確定用戶點擊的按鈕。

舉個簡單的例子:

#include <QApplication>
#include <QMessageBox>
#include <QPushButton>
#include <QDebug>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMessageBox MBox;
    MBox.setWindowTitle("QMessageBox自定義對話框");
    MBox.setText("這是一個自定義的對話框");
    MBox.setIconPixmap(QPixmap("C:\\Users\\xiexuewu\\Desktop\\icon_c.png"));
    QPushButton *agreeBut = MBox.addButton("同意", QMessageBox::AcceptRole);
    MBox.exec();
    if (MBox.clickedButton() == (QAbstractButton*)agreeBut) {
        //在 Qt Creator 的輸出窗口中輸出指定字符串
        qDebug() << "用戶點擊了同意按鈕";
    }
    return a.exec();
}

程序運行結(jié)果如圖 8 所示,點擊“同意”按鈕后,我們會在 Qt Creator 的輸出窗口中看到“用戶點擊了同意按鈕”。

圖 8 自定義的 QMessageBox 對話框

QMessageBox的信號和槽

操作 QMessageBox 對話框,最常用的信號函數(shù)是 buttonClicked() 函數(shù),最常用的槽函數(shù)是 exec() 函數(shù),它們的語法格式和功能如下表所示。?

表 3 QMessageBox信號和槽

信號函數(shù) 功 能
void QMessageBox::buttonClicked(QAbstractButton *button) 當(dāng)用戶點擊對話框中的某個按鈕時,會觸發(fā)此信號函數(shù),該函數(shù)會將用戶點擊的按鈕作為參數(shù)傳遞給槽函數(shù)。
槽函數(shù) 功 能
int QMessageBox::exec() 彈出對話框,直到用戶手動關(guān)閉對話框,此對話框?qū)⒁恢贝嬖凇?/td>

舉個簡單的例子:

//main.cpp
#include <QApplication>
#include <QWidget>
#include <QMessageBox>
#include <QPushButton>
#include <QAbstractButton>
QPushButton* agreeBut;
QPushButton* disagreeBut;
class MyWidget:public QWidget{
    Q_OBJECT
public slots:
    void buttonClicked(QAbstractButton * butClicked);
};
void MyWidget::buttonClicked(QAbstractButton * butClicked){
    if(butClicked == (QAbstractButton*)disagreeBut){
        this->close();
    }
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //創(chuàng)建主窗口
    MyWidget myWidget;
    myWidget.setWindowTitle("主窗口");
    myWidget.resize(400,300);
    //創(chuàng)建消息框
    QMessageBox MyBox(QMessageBox::Question,"","");
    MyBox.setParent(&myWidget);
    //設(shè)置消息框的屬性為對話框,它會是一個獨立的窗口
    MyBox.setWindowFlags(Qt::Dialog);
    MyBox.setWindowTitle("協(xié)議");
    MyBox.setText("使用本產(chǎn)品,請您嚴(yán)格遵守xxx規(guī)定!");
    //自定義兩個按鈕
    agreeBut = MyBox.addButton("同意", QMessageBox::AcceptRole);
    disagreeBut = MyBox.addButton("拒絕", QMessageBox::RejectRole);
    myWidget.show();
    //添加信號和槽,監(jiān)聽用戶點擊的按鈕,如果用戶拒絕,則主窗口隨之關(guān)閉。
    QObject::connect(&MyBox,&QMessageBox::buttonClicked,&myWidget,&MyWidget::buttonClicked);
    MyBox.exec();
    return a.exec();
}
//MyWidget類的定義應(yīng)該放到 .h 文件中,本例中將其寫到 main.cpp 中,程序最后需要添加 #include "當(dāng)前源文件名.moc" 語句,否則無法通過編譯。
#include "main.moc"

程序執(zhí)行結(jié)果為:

?到此這篇關(guān)于Qt QMessageBox類使用教程的文章就介紹到這了,更多相關(guān)Qt QMessageBox內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用C語言遞歸實現(xiàn)火車調(diào)度算法詳解

    用C語言遞歸實現(xiàn)火車調(diào)度算法詳解

    本文主要介紹了用C語言遞歸實現(xiàn)火車調(diào)度算法詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言實現(xiàn)打磚塊游戲

    C語言實現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++細(xì)講深淺拷貝與初始化列表如何操作

    C++細(xì)講深淺拷貝與初始化列表如何操作

    C++對象特性里的拷貝構(gòu)造函數(shù)有更深入的含義,而且面試曾經(jīng)問過關(guān)于拷貝的析構(gòu)問題,那么今天就好好解析一下深淺拷貝的問題;還有初始化列表的形式,這個在給對象屬性初始化的時候非常方便,建議大家熟練掌握,話不多說,開始正文
    2022-05-05
  • C語言 遞歸解決青蛙跳臺階問題

    C語言 遞歸解決青蛙跳臺階問題

    遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用?;竞x&#8203;是指函數(shù)/過程/子程序在運行過程序中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。在計算機編程里,遞歸指的是一個過程:函數(shù)不斷引用自身,直到引用的對象已知
    2021-11-11
  • C++實現(xiàn)簡單射擊小游戲

    C++實現(xiàn)簡單射擊小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)簡單射擊小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 函數(shù)指針與指針函數(shù)的學(xué)習(xí)總結(jié)

    函數(shù)指針與指針函數(shù)的學(xué)習(xí)總結(jié)

    函數(shù)指針是指向函數(shù)的指針,指針函數(shù)是指一個函數(shù)的返回值是一個指針。以下就是對函數(shù)指針與指針函數(shù)的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C++結(jié)構(gòu)體初始化的10種寫法總結(jié)

    C++結(jié)構(gòu)體初始化的10種寫法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了10種C++中結(jié)構(gòu)體初始化的寫法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • C語言函數(shù)棧幀的創(chuàng)建和銷毀詳解

    C語言函數(shù)棧幀的創(chuàng)建和銷毀詳解

    這篇文章主要為大家詳細(xì)介紹了C語言函數(shù)棧幀的創(chuàng)建和銷毀,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • VSCODE+cmake配置C++開發(fā)環(huán)境的實現(xiàn)步驟

    VSCODE+cmake配置C++開發(fā)環(huán)境的實現(xiàn)步驟

    這篇文章主要介紹了VSCODE+cmake配置C++開發(fā)環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • c++ 結(jié)構(gòu)體內(nèi)存對齊基本概念及示例

    c++ 結(jié)構(gòu)體內(nèi)存對齊基本概念及示例

    這篇文章主要介紹了c++ 結(jié)構(gòu)體內(nèi)存對齊基本概念及示例,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-12-12

最新評論