日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt-QMessageBox用法详解

發布時間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt-QMessageBox用法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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


圖 1 QMessageBox消息對話框


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

通用的QMessageBox消息框

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

1) information消息對話框

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


圖 2 information 消息對話框


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

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

各個參數的含義是:

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


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

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


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

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

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

2)?critical消息對話框

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


圖 3 critical 消息對話框


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

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

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

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

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

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

3)?question消息對話框

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


圖 4 question消息對話框


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

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

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

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

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

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

4) warning消息對話框

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


圖 5 warning消息對話框


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

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

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

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

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

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

5) about和aboutQt對話框

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


圖 6 about消息對話框


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

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

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

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

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


圖 7 aboutQt對話框


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

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

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

自定義QMessageBox對話框

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

QMessageBox對話框的創建

程序中創建 QMessageBox 對象,必須先引入<QMessageBox>頭文件。QMessageBox 類提供了兩個構造函數,分別是:

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)

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

第二個構造函數中,各個參數的含義是:

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

?
舉個簡單的例子:

  • #include <QApplication>
  • #include <QMessageBox>
  • int main(int argc, char *argv[])
  • {
  • QApplication a(argc, argv);
  • //創建 QMessageBox 類對象
  • QMessageBox MyBox(QMessageBox::Question,"Title","text",QMessageBox::Yes|QMessageBox::No);
  • //使 MyBox 對話框顯示
  • MyBox.exec();
  • return a.exec();
  • }
  • 程序中創建了一個 MyBox 對話框,通過調用 QMessageBox 提供的 exec() 方法,可以使?MyBox 對話框彈出。運行程序可以發現,MyBox 對話框的外觀和圖 4 的 question 對話框完全一樣。

    QMessageBox對話框的使用

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

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

    表 2 QMessageBox 常用成員方法成員方法功 能
    void QMessageBox::setWindowTitle(const QString &title)設置對話框的標題。
    void setText(const QString &text)設置對話框中要顯示的文本。
    void setIconPixmap(const QPixmap &pixmap)設置對話框中使用的圖片。
    QAbstractButton *QMessageBox::clickedButton() const返回用戶點擊的按鈕。
    QPushButton *QMessageBox::addButton(const QString &text, ButtonRole role)向對話框中添加按鈕,text 為按鈕的文本,role 是 QMessageBox::ButtonRole 枚舉類型的變量,用于描述按鈕扮演的角色,它的可選值有?QMessageBox::AcceptRole(同 OK 按鈕)、QMessageBox::RejectRole(同 Cancel 按鈕)等。
    int QMessageBox::exec()使當前對話框彈出,除非用戶關閉對話框,否則對話框將一直存在。此外,當對話框中使用的都是 Qt 提供的按鈕時,該方法可以監聽用戶點擊的是哪個按鈕,并將該按鈕對應的枚舉值返回;如果對話框中包含自定義按鈕,需要借助 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();
  • }
  • 程序運行結果如圖 8 所示,點擊“同意”按鈕后,我們會在 Qt Creator 的輸出窗口中看到“用戶點擊了同意按鈕”。
    ?


    圖 8 自定義的 QMessageBox 對話框

    QMessageBox的信號和槽

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

    表 3 QMessageBox信號和槽信號函數功 能槽函數功 能
    void QMessageBox::buttonClicked(QAbstractButton *button)當用戶點擊對話框中的某個按鈕時,會觸發此信號函數,該函數會將用戶點擊的按鈕作為參數傳遞給槽函數。
    int QMessageBox::exec()彈出對話框,直到用戶手動關閉對話框,此對話框將一直存在。


    舉個簡單的例子:

  • //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);
  • //創建主窗口
  • MyWidget myWidget;
  • myWidget.setWindowTitle("主窗口");
  • myWidget.resize(400,300);
  • //創建消息框
  • QMessageBox MyBox(QMessageBox::Question,"","");
  • MyBox.setParent(&myWidget);
  • //設置消息框的屬性為對話框,它會是一個獨立的窗口
  • MyBox.setWindowFlags(Qt::Dialog);
  • MyBox.setWindowTitle("協議");
  • MyBox.setText("使用本產品,請您嚴格遵守xxx規定!");
  • //自定義兩個按鈕
  • agreeBut = MyBox.addButton("同意", QMessageBox::AcceptRole);
  • disagreeBut = MyBox.addButton("拒絕", QMessageBox::RejectRole);
  • myWidget.show();
  • //添加信號和槽,監聽用戶點擊的按鈕,如果用戶拒絕,則主窗口隨之關閉。
  • QObject::connect(&MyBox,&QMessageBox::buttonClicked,&myWidget,&MyWidget::buttonClicked);
  • MyBox.exec();
  • return a.exec();
  • }
  • //MyWidget類的定義應該放到 .h 文件中,本例中將其寫到 main.cpp 中,程序最后需要添加 #include "當前源文件名.moc" 語句,否則無法通過編譯。
  • #include "main.moc"
  • 程序執行結果為:

    總結

    以上是生活随笔為你收集整理的Qt-QMessageBox用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。