首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Qt 學習之路 (17):標準對話框 QMessageBox 完整指南

     編輯:關於C語言

前言

繼續 Qt 標準對話框系列,本篇深入講解 QMessageBox 及其同類靜態函數。雖然前文已簡略使用,現在系統梳理其完整用法、圖示類型、HTML 支援、自訂圖示與互動處理。

一、核心靜態函數:information()

QMessageBox::information(NULL, "Title", "Content",
                         QMessageBox::Yes | QMessageBox::No,
                         QMessageBox::Yes);

函數簽名:

static StandardButton information(QWidget *parent,
                                  const QString &title,
                                  const QString &text,
                                  StandardButtons buttons = Ok,
                                  StandardButton defaultButton = NoButton);
  • parent:父視窗指標,NULL 為獨立視窗
  • title:對話框標題列文字
  • text:主要訊息內容,支援 HTML 標籤
  • buttons:按鈕組合,使用 StandardButton 列舉值按位或運算
  • defaultButton:預設聚焦按鈕,預設 NoButton(無)

Qt Creator 輸入 ( 後會自動顯示簽名提示,大幅降低記憶負擔。

二、五種預設圖示類型對比

函數圖示適用場景按鈕參數
information()藍色i一般資訊提示支援自訂
critical()紅色×嚴重錯誤支援自訂
warning()黃色!警告訊息支援自訂
question()藍色?詢問用戶決策支援自訂
about()Qt Logo關於對話框無按鈕參數,僅含「確定」

about() 簽名較簡單:static void about(QWidget*, const QString&, const QString&)。

三、HTML 富文本支援

所有靜態函數的 text 參數均支援 HTML:

QMessageBox::about(NULL, "About",
    "About this <font color='red'>application</font>");

執行後「application」將以紅色顯示。

四、自訂圖示:物件導向用法

需自訂圖示時,不能使用靜態函數,改為建立物件:

QMessageBox msg(QMessageBox::NoIcon, "Title", "Content with icon.");
msg.setIconPixmap(QPixmap("icon.png"));  // 設定自訂圖片
msg.exec();  // 必須用 exec() 啟動模態事件循環
  • 使用 exec() 而非 show(),因為是模態對話框,需自有事件循環
  • 相對路徑 "icon.png" 相對於執行檔 .exe 所在目錄
  • Qt 內建支援 PNG,JPEG 需部署插件(imageformats/qjpeg.dll)

五、處理用戶互動:兩種模式

5.1 靜態函數模式:直接判斷回傳值

QMessageBox::StandardButton rb = QMessageBox::question(...);
if (rb == QMessageBox::Yes) {
    QMessageBox::aboutQt(NULL, "About Qt");
}

5.2 物件模式:判斷 exec() 回傳值

QMessageBox msg(QMessageBox::NoIcon, "Show Qt", "...",
                QMessageBox::Yes | QMessageBox::No, NULL);
if (msg.exec() == QMessageBox::Yes) {
    QMessageBox::aboutQt(NULL, "About Qt");
}

兩種方式本質相同,物件模式適合需自訂圖示或複雜佈局的場景。

六、完整程式碼範例

參考原文附件獲取可直接編譯的完整專案。本文出自「豆子空間」博客。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved