QMessageBox 用於顯示消息提示。我們一般會使用其提供的幾個 static 函數:
1、顯示關於對話框:
// 關於對話框:該對話框只有一個 OK 按鈕
// 參數1:父對象;
// 參數2:對話框標題;
// 參數3:對話框內容;
QMessageBox::about(this, "關於對話框", "服務暫停,請稍後再試!");
結果:
2、顯示關於 Qt 對話框。該對話框用於顯示有關 Qt 的信息:
// 顯示關於 Qt 對話框。該對話框用於顯示有關 Qt 的信息。
// 參數1:父對象;
// 參數2:對話框標題;
QMessageBox::aboutQt(this, "關於對話框");
結果:
3、顯示嚴重錯誤對話框:
// 顯示嚴重錯誤對話框。這個對話框將顯示一個紅色的錯誤符號。我們可以通過 參數4 指明其
// 顯示的按鈕,默認情況下只有一個 Ok 按鈕,我們可以使用 StandardButtons 類型指定多種按鈕。
// 該方法有一個返回值,用於確定用戶點擊的是哪一個按鈕。
// 參數1:父對象;
// 參數2:對話框標題;
// 參數3:對話框內容;
// 參數4:關聯的按鍵類型,可以使用或(|)運算符,指定對話框應該出現的按鈕;
// 參數5:指定默認選擇的按鈕(只能選擇在 參數4 中列出的按鈕類型);可以省略,默認選擇第一個按鈕。
int result = QMessageBox::critical(this, "錯誤對話框", "保存信息出錯,是否繼續執行?",
QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok);
if (result == QMessageBox::Ok)
{
qDebug() << "點擊了 OK 按鈕";
}
else
{
qDebug() << "點擊了 Cancel 按鈕";
}
結果:
4、顯示普通信息對話框:這個對話框將顯示一個藍色的信息符號。用法和 critical 一樣:
int result = QMessageBox::information(this, "信息對話框", "保存信息出錯,是否繼續執行?",
QMessageBox::Ok | QMessageBox::Cancel);
if (result == QMessageBox::Ok)
{
qDebug() << "點擊了 OK 按鈕";
}
else
{
qDebug() << "點擊了 Cancel 按鈕";
}
結果:
5、顯示詢問對話框:和 critical 用法一樣,不同之處是該對話框顯示一個問號圖標,並且默認顯示的按鈕是 Yes 和 No:
int result = QMessageBox::question(this, "詢問對話框", "是否保存文件?");
if (result == QMessageBox::Yes)
{
qDebug() << "點擊了 Yes 按鈕";
}
else if (result == QMessageBox::No)
{
qDebug() << "點擊了 No 按鈕";
}
結果:
6、顯示警告對話框:用法和 critical 一樣,不同之處是該對話框顯示一個感嘆號圖標:
int result = QMessageBox::warning(this, "警告對話框", "保存信息出錯,是否繼續執行?",
QMessageBox::Ok | QMessageBox::Cancel);
if (result == QMessageBox::Ok)
{
qDebug() << "點擊了 Ok 按鈕";
}
else if (result == QMessageBox::Cancel)
{
qDebug() << "點擊了 Cancel 按鈕";
}
結果:
7、自定義消息框:
// 自定義消息框
QMessageBox msgBox;
msgBox.setWindowTitle("自定義消息框"); // 設置消息框標題
msgBox.setText("文檔已被修改!"); // 設置消息框顯示的內容
msgBox.setInformativeText("是否保存修改的內容?"); // 設置簡單的說明文字
msgBox.setDetailedText("詳細內容..."); // 設置詳細內容
msgBox.setStandardButtons(QMessageBox::Save
| QMessageBox::Discard
| QMessageBox::Cancel); // 設置消息框顯示的按鈕類型
msgBox.setDefaultButton(QMessageBox::Save); // 設置默認選擇的按鈕
// 執行消息框(模態對話框,阻塞)
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::Save:
{
QString str = msgBox.detailedText(); // 獲取詳細內容
qDebug() << "保存文本!" << str.toUtf8().data();
break;
}
case QMessageBox::Discard:
{
qDebug() << "放棄更改,繼續執行!";
break;
}
case QMessageBox::Cancel:
{
qDebug() << "取消更改,結束程序!";
break;
}
}
結果: