繼續 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&)。
所有靜態函數的 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 所在目錄imageformats/qjpeg.dll)QMessageBox::StandardButton rb = QMessageBox::question(...);
if (rb == QMessageBox::Yes) {
QMessageBox::aboutQt(NULL, "About Qt");
}
exec() 回傳值QMessageBox msg(QMessageBox::NoIcon, "Show Qt", "...",
QMessageBox::Yes | QMessageBox::No, NULL);
if (msg.exec() == QMessageBox::Yes) {
QMessageBox::aboutQt(NULL, "About Qt");
}
兩種方式本質相同,物件模式適合需自訂圖示或複雜佈局的場景。
參考原文附件獲取可直接編譯的完整專案。本文出自「豆子空間」博客。