Qt中QMessageBox使用小結(jié)
1.基本消息框
簡(jiǎn)單信息提示
#include <QMessageBox> // 信息提示框 QMessageBox::information(nullptr, "標(biāo)題", "這是一條信息"); // 警告框 QMessageBox::warning(nullptr, "警告", "這是一個(gè)警告!"); // 錯(cuò)誤框 QMessageBox::critical(nullptr, "錯(cuò)誤", "發(fā)生了一個(gè)錯(cuò)誤!"); // 詢問框 QMessageBox::question(nullptr, "詢問", "你確定要執(zhí)行此操作嗎?");
2.帶按鈕的消息框
基本按鈕配置
// 帶 Yes/No 按鈕
QMessageBox::StandardButton reply;
reply = QMessageBox::question(nullptr, "確認(rèn)", "確定要退出嗎?",
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
qDebug() << "用戶選擇了 Yes";
} else {
qDebug() << "用戶選擇了 No";
}
// 帶多個(gè)按鈕
QMessageBox::StandardButton reply = QMessageBox::question(
nullptr,
"保存文件",
"文件已修改,是否保存?",
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel
);
switch (reply) {
case QMessageBox::Save:
qDebug() << "保存文件";
break;
case QMessageBox::Discard:
qDebug() << "不保存";
break;
case QMessageBox::Cancel:
qDebug() << "取消操作";
break;
}3.自定義消息框
基本示例
QMessageBox msgBox;
msgBox.setWindowTitle("自定義標(biāo)題");
msgBox.setText("這是一條詳細(xì)的消息內(nèi)容");
msgBox.setInformativeText("這是附加信息");
msgBox.setDetailedText("這是詳細(xì)的技術(shù)信息:\n錯(cuò)誤代碼: 0x1234\n文件: main.cpp");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Ok);
int ret = msgBox.exec();
if (ret == QMessageBox::Ok) {
qDebug() << "用戶點(diǎn)擊了確定";
}設(shè)置父窗口
// 在類的方法中使用 this 作為父對(duì)象
void MainWindow::showMessage()
{
QMessageBox::information(this, "提示", "操作成功完成");
// 或者使用對(duì)象方式
QMessageBox msgBox(this);
msgBox.setWindowTitle("父對(duì)象示例");
msgBox.setText("這個(gè)對(duì)話框會(huì)居中顯示在父窗口");
msgBox.exec();
}設(shè)置默認(rèn)按鈕
QMessageBox msgBox;
msgBox.setText("請(qǐng)選擇操作");
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::No); // 默認(rèn)選中 No 按鈕
msgBox.exec();自定義告警對(duì)話框(按鈕居中顯示)
void myselfBoxWarn(const QString & title, const QString & content)
{
QMessageBox msgBox;
msgBox.setWindowTitle(title);
msgBox.setText(content);
msgBox.setStandardButtons(QMessageBox::Ok);
// 設(shè)置字體大小 - 使用樣式表
msgBox.setStyleSheet("QLabel{ font-size: 32px; }"
"QPushButton{ font-size: 32px; width: 200px; height: 36px; }"
"QDialogButtonBox {qproperty-centerButtons: true;}");
msgBox.exec();
}自定義告警提示選擇對(duì)話框(按鈕居中顯示)
QMessageBox msgBox;
msgBox.setWindowTitle(tr("manage"));
msgBox.setText(tr("set success. must be restarted to take effect."));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::Yes);
// 設(shè)置樣式表
msgBox.setStyleSheet(
"QMessageBox {"
" font-size: 16px;"
" font-family: Source Han Sans SC;"
"}"
"QMessageBox QLabel {"
" font-size: 16px;"
" min-width: 400px;"
" min-height: 60px;"
"}"
"QMessageBox QPushButton {"
" font-size: 14px;"
" min-width: 100px;"
" min-height: 35px;"
" padding: 8px;"
"}"
"QDialogButtonBox {"
" qproperty-centerButtons: true;" // 使用 Qt 屬性
"}"
);
if(msgBox.exec() == QMessageBox::Yes){
// 獲取當(dāng)前程序的路徑和參數(shù)
QString program = QApplication::applicationFilePath();
QStringList arguments = QApplication::arguments();
// 啟動(dòng)新進(jìn)程(startDetached 會(huì)在當(dāng)前程序退出后運(yùn)行)
QProcess::startDetached(program, arguments);
// 關(guān)閉當(dāng)前程序
QApplication::quit();
}設(shè)置圖標(biāo)和樣式
QMessageBox msgBox;
msgBox.setWindowTitle("樣式化消息框");
msgBox.setText("<h3>HTML 格式文本</h3>");
msgBox.setInformativeText("支持 <b>粗體</b>、<i>斜體</i> 等 HTML 標(biāo)簽");
// 設(shè)置圖標(biāo)
msgBox.setIconPixmap(QPixmap(":/images/icon.png").scaled(64, 64));
// 設(shè)置樣式
msgBox.setStyleSheet(
"QMessageBox {"
" background-color: #f0f0f0;"
" font-size: 14px;"
"}"
"QMessageBox QPushButton {"
" min-width: 80px;"
" min-height: 30px;"
"}"
);
msgBox.exec();4. 按鈕(默認(rèn)和自定義)
常用按鈕類型
// 標(biāo)準(zhǔn)按鈕組合 QMessageBox::Ok // 確定 QMessageBox::Open // 打開 QMessageBox::Save // 保存 QMessageBox::Cancel // 取消 QMessageBox::Close // 關(guān)閉 QMessageBox::Discard // 放棄 QMessageBox::Apply // 應(yīng)用 QMessageBox::Reset // 重置 QMessageBox::RestoreDefaults // 恢復(fù)默認(rèn) QMessageBox::Help // 幫助 QMessageBox::SaveAll // 全部保存 QMessageBox::Yes // 是 QMessageBox::YesToAll // 全是 QMessageBox::No // 否 QMessageBox::NoToAll // 全否 QMessageBox::Abort // 中止 QMessageBox::Retry // 重試 QMessageBox::Ignore // 忽略
QMessageBox msgBox;
msgBox.setWindowTitle("按鈕角色");
// 不同角色的按鈕
msgBox.addButton("確定", QMessageBox::AcceptRole); // 接受操作
msgBox.addButton("應(yīng)用", QMessageBox::ApplyRole); // 應(yīng)用更改
msgBox.addButton("重置", QMessageBox::ResetRole); // 重置設(shè)置
msgBox.addButton("是", QMessageBox::YesRole); // 肯定回答
msgBox.addButton("否", QMessageBox::NoRole); // 否定回答
msgBox.addButton("拒絕", QMessageBox::RejectRole); // 拒絕操作
msgBox.addButton("幫助", QMessageBox::HelpRole); // 請(qǐng)求幫助
msgBox.addButton("自定義", QMessageBox::ActionRole); // 自定義操作
msgBox.setText("不同角色的按鈕示例");
msgBox.exec();帶圖標(biāo)的自定義按鈕
QMessageBox msgBox;
msgBox.setWindowTitle("帶圖標(biāo)的按鈕");
msgBox.setText("請(qǐng)選擇操作:");
// 創(chuàng)建帶圖標(biāo)的按鈕
QPushButton* okButton = new QPushButton(QIcon(":/icons/ok.png"), "確定");
QPushButton* cancelButton = new QPushButton(QIcon(":/icons/cancel.png"), "取消");
QPushButton* helpButton = new QPushButton(QIcon(":/icons/help.png"), "幫助");
// 添加到消息框
msgBox.addButton(okButton, QMessageBox::AcceptRole);
msgBox.addButton(cancelButton, QMessageBox::RejectRole);
msgBox.addButton(helpButton, QMessageBox::HelpRole);
msgBox.setDefaultButton(okButton);
msgBox.exec();
if (msgBox.clickedButton() == okButton) {
qDebug() << "確定";
} else if (msgBox.clickedButton() == helpButton) {
QMessageBox::information(&msgBox, "幫助", "這是幫助信息");
}5. 圖標(biāo)(默認(rèn)和自定義)
默認(rèn)圖標(biāo)
QMessageBox::Information - 藍(lán)色信息圖標(biāo) QMessageBox::Warning - 黃色警告圖標(biāo) QMessageBox::Critical - 紅色錯(cuò)誤圖標(biāo) QMessageBox::Question - 藍(lán)色問號(hào)圖標(biāo) QMessageBox::NoIcon - 無圖標(biāo)
#include <QMessageBox>
// 1. 無圖標(biāo)
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::NoIcon);
msgBox.setText("沒有圖標(biāo)的消息框");
msgBox.exec();
// 2. 信息圖標(biāo)
QMessageBox::information(nullptr, "信息", "這是一個(gè)信息提示");
// 3. 警告圖標(biāo)
QMessageBox::warning(nullptr, "警告", "這是一個(gè)警告消息");
// 4. 錯(cuò)誤圖標(biāo)
QMessageBox::critical(nullptr, "錯(cuò)誤", "這是一個(gè)錯(cuò)誤消息");
// 5. 詢問圖標(biāo)
QMessageBox::question(nullptr, "詢問", "這是一個(gè)詢問消息");使用 setIcon() 方法設(shè)置圖標(biāo)
QMessageBox msgBox;
msgBox.setWindowTitle("設(shè)置圖標(biāo)類型");
// 設(shè)置不同的圖標(biāo)類型
msgBox.setIcon(QMessageBox::Information); // 信息圖標(biāo)
// msgBox.setIcon(QMessageBox::Warning); // 警告圖標(biāo)
// msgBox.setIcon(QMessageBox::Critical); // 錯(cuò)誤圖標(biāo)
// msgBox.setIcon(QMessageBox::Question); // 詢問圖標(biāo)
msgBox.setText("使用 setIcon() 方法設(shè)置圖標(biāo)");
msgBox.exec();自定義圖標(biāo)
1)使用 setIconPixmap()
QMessageBox msgBox;
msgBox.setWindowTitle("自定義圖標(biāo)");
msgBox.setText("使用自定義圖標(biāo)的消息框");
// 使用自定義圖標(biāo)替換默認(rèn)圖標(biāo)
QPixmap customPixmap(":/images/my_icon.png"); // 從資源文件
// 或者: QPixmap customPixmap("C:/icons/custom.png"); // 從文件系統(tǒng)
// 縮放圖標(biāo)到合適大小
customPixmap = customPixmap.scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation);
msgBox.setIconPixmap(customPixmap);
msgBox.exec();2)完全自定義圖標(biāo)的方法
QMessageBox msgBox;
msgBox.setWindowTitle("完全自定義");
// 重要:必須先設(shè)置為 NoIcon,否則自定義圖標(biāo)可能不顯示
msgBox.setIcon(QMessageBox::NoIcon);
// 然后設(shè)置自定義圖標(biāo)
QPixmap customIcon(":/images/success.png");
customIcon = customIcon.scaled(48, 48, Qt::KeepAspectRatio, Qt::SmoothTransformation);
msgBox.setIconPixmap(customIcon);
msgBox.setText("操作成功完成!");
msgBox.exec();6. 長(zhǎng)文本顯示
自動(dòng)換行(默認(rèn)行為)
QMessageBox 會(huì)自動(dòng)根據(jù)對(duì)話框?qū)挾葥Q行:
QMessageBox::information(this, "自動(dòng)換行",
"這是一段很長(zhǎng)的文本,QMessageBox 會(huì)自動(dòng)根據(jù)對(duì)話框的寬度進(jìn)行換行處理,"
"確保所有內(nèi)容都能正確顯示給用戶,不需要手動(dòng)添加換行符。");手動(dòng)添加換行符
QMessageBox::information(this, "手動(dòng)換行",
"第一行文本\n"
"第二行文本\n"
"第三行文本\n"
"這是最后一行");使用 HTML 標(biāo)簽控制格式
QMessageBox msgBox;
msgBox.setWindowTitle("HTML 格式");
msgBox.setText("<html>"
"<p>這是第一段文本,可以自動(dòng)換行</p>"
"<p>這是第二段文本</p>"
"<p style='color: red;'>這是紅色文本</p>"
"<ul>"
"<li>列表項(xiàng) 1</li>"
"<li>列表項(xiàng) 2</li>"
"<li>列表項(xiàng) 3</li>"
"</ul>"
"</html>");
msgBox.exec();設(shè)置固定寬度的消息框
QMessageBox msgBox;
msgBox.setWindowTitle("固定寬度");
msgBox.setText("這是一段很長(zhǎng)的文本,我們將通過設(shè)置樣式表來控制對(duì)話框的寬度,從而實(shí)現(xiàn)更好的換行效果。");
msgBox.setStyleSheet("QMessageBox { min-width: 500px; }");
msgBox.exec();使用 setText 和 setInformativeText 組合
QMessageBox msgBox;
msgBox.setWindowTitle("組合文本");
msgBox.setText("主要信息:操作成功完成");
msgBox.setInformativeText("詳細(xì)信息:文件已保存到指定位置,所有更改都已應(yīng)用。"
"您可以繼續(xù)其他操作或查看保存的文件。");
msgBox.exec();超長(zhǎng)文本使用 setDetailedText
QMessageBox msgBox;
msgBox.setWindowTitle("詳細(xì)文本");
msgBox.setText("操作完成");
msgBox.setInformativeText("基本操作已執(zhí)行成功");
msgBox.setDetailedText("這是詳細(xì)的執(zhí)行日志:\n"
"1. 步驟一:初始化系統(tǒng)... 完成\n"
"2. 步驟二:加載配置文件... 完成\n"
"3. 步驟三:處理數(shù)據(jù)... 完成\n"
"4. 步驟四:保存結(jié)果... 完成\n"
"5. 步驟五:清理資源... 完成\n"
"所有操作執(zhí)行成功,耗時(shí) 2.3 秒");
msgBox.exec();到此這篇關(guān)于Qt中QMessageBox使用小結(jié)的文章就介紹到這了,更多相關(guān)Qt QMessageBox使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在C語言中調(diào)用C++做的動(dòng)態(tài)鏈接庫
如果你有一個(gè)c++做的動(dòng)態(tài)鏈接庫.so文件,而你只有一些相關(guān)類的聲明,那么你如何用c調(diào)用呢,別著急,本文通過一個(gè)小小的例子,讓你能夠很爽的搞定.2016-05-05
C++?Boost?ProgramOptions超詳細(xì)講解
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11
C語言與java語言中關(guān)于二維數(shù)組的區(qū)別
這篇文章主要介紹了C語言與java語言中關(guān)于二維數(shù)組的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

