聊一聊 QMessageBox 的高級(jí)用法
QMessageBox高級(jí)用法
// 可以使用 setDefaultButton 來指定默認(rèn)按鈕 即按下Enter時(shí)激活的按鈕
// 可以使用setEscapeButton() 指定escape按鈕(按下Esc時(shí)激活的按鈕)
QMessageBox msgBox;
// 設(shè)置LOGO
msgBox.setIcon(QMessageBox::Information); // 設(shè)置圖標(biāo)
msgBox.setWindowTitle("Messagebox測(cè)試"); // 設(shè)置標(biāo)題
// 設(shè)置自定義圖標(biāo)
// msgBox.setIcon(QIcon(":/path/to/your/icon.png"));
// 創(chuàng)建自定義圖標(biāo)的 QPixmap 對(duì)象
//QPixmap customIcon(":/path/to/your/icon.png"); // 請(qǐng)確保路徑正確并已包含在 Qt 資源文件中
// 設(shè)置自定義的圖標(biāo)
//msgBox.setIconPixmap(customIcon);
msgBox.setText(title);
msgBox.setInformativeText(Information); // 向用戶提供更多詳細(xì)信息
msgBox.setDetailedText(detail); // 設(shè)置此屬性,就會(huì)出現(xiàn) show Detail按鈕,點(diǎn)擊之后,呈現(xiàn)Detail詳細(xì)信息
// setTextFormat 設(shè)置顯示的文本格式 將文本格式化為純文本或富文本(如 HTML 格式),從而能夠更靈活地展示信息。
msgBox.setTextFormat(Qt::RichText);
msgBox.setText("<b>這是一個(gè)富文本消息框示例。</b><br>"
"你可以使用 <i>HTML</i> 標(biāo)簽來格式化文本。<br>"
"<ul>"
"<li>項(xiàng)目1</li>"
"<li>項(xiàng)目2</li>"
"<li>項(xiàng)目3</li>"
"</ul>");
// 設(shè)置標(biāo)準(zhǔn)按鈕
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Discard); // 啟動(dòng)彈窗時(shí) 默認(rèn)的按鈕
msgBox.setEscapeButton(QMessageBox::Cancel); // 點(diǎn)擊ESC按鈕激活的按鈕
// 添加復(fù)選框
QCheckBox *box = new QCheckBox("我同意條款和條件");
msgBox.setCheckBox(box);
// 添加按鈕
msgBox.addButton("ApplyRole",QMessageBox::ApplyRole);
// 設(shè)置文本交互標(biāo)志
msgBox.setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
// 設(shè)置MessageBox的應(yīng)用程序模態(tài)
msgBox.setWindowModality(Qt::ApplicationModal);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Save:
// Save was clicked
qDebug()<<"Clicked the sava";
break;
case QMessageBox::Discard:
// Don't Save was clicked
qDebug()<<"Clicked the Discard";
break;
case QMessageBox::Cancel:
// Cancel was clicked
qDebug()<<"Clicked the Cancel";
break;
default:
// should never be reached
break;
}
呈現(xiàn)內(nèi)容
設(shè)置詳細(xì)信息區(qū)域中顯示文本
文本將被解釋為純文本。默認(rèn)情況下,此屬性包含空字符串。
設(shè)置之后會(huì)出現(xiàn) 查看詳細(xì)信息的 文本按鈕:
QString detailedText() const
void setDetailedText(const QString &text)
設(shè)置圖標(biāo)
用于顯示實(shí)際圖標(biāo)的pixmap取決于當(dāng)前的GUI樣式。也可以通過設(shè)置icon pixmap屬性為圖標(biāo)設(shè)置自定義pixmap。
QMessageBox::Icon icon() const
void setIcon(QMessageBox::Icon)
// 參考圖標(biāo)
QMessageBox::NoIcon
QMessageBox::Question
QMessageBox::Information
QMessageBox::Warning
QMessageBox::Critical
// 使用實(shí)例
msgBox.setIcon(QMessageBox::Information); // 設(shè)置圖標(biāo)
// 設(shè)置自定義圖標(biāo)
// msgBox.setIcon(QIcon(":/path/to/your/icon.png"));
修改圖標(biāo)
消息框當(dāng)前使用的圖標(biāo)。請(qǐng)注意,通常很難繪制一個(gè)在所有GUI樣式中都合適的pixmap;您可能需要為每個(gè)平臺(tái)提供不同的pixmap。默認(rèn)情況下,此屬性未定義。
QPixmap iconPixmap() const
void setIconPixmap(const QPixmap &pixmap)
// 使用示例
// 創(chuàng)建自定義圖標(biāo)的 QPixmap 對(duì)象
QPixmap customIcon(":/path/to/your/icon.png"); // 請(qǐng)確保路徑正確并已包含在 Qt 資源文件中
// 設(shè)置自定義的圖標(biāo)
msgBox.setIconPixmap(customIcon);
更完整描述信息性文本
信息的text可用于展開text() ,以向用戶提供更多信息。在Mac上,此文本以系統(tǒng)小字體顯示在text() 下方。在其他平臺(tái)上,它只是附加到現(xiàn)有文本中。默認(rèn)情況下,此屬性包含空字符串。
QString informativeText() const
void setInformativeText(const QString &text)
標(biāo)準(zhǔn)按鈕集合
此屬性控制消息框使用的標(biāo)準(zhǔn)按鈕。默認(rèn)情況下,此屬性不包含標(biāo)準(zhǔn)按鈕。
QMessageBox::StandardButtons standardButtons() const
void setStandardButtons(QMessageBox::StandardButtons buttons)
保存顯示的消息框文本
文本將被解釋為純文本或富文本,具體取決于文本格式設(shè)置(QMessageBox::textFormat)。默認(rèn)設(shè)置為Qt::AutoText,即消息框?qū)L試自動(dòng)檢測(cè)文本的格式。此屬性的默認(rèn)值為空字符串。
QString text() const
void setText(const QString &text)
添加復(fù)選框按鈕
// 添加復(fù)選框
QCheckBox *box = new QCheckBox("我同意條款和條件");
msgBox.setCheckBox(box);
消息框文本格式
setTextFormat:消息框使用的當(dāng)前文本格式。有關(guān)可能選項(xiàng)的說明,請(qǐng)參見Qt::TextFormat枚舉。默認(rèn)格式是Qt::AutoText。
- PlainText: 使用純文本格式
- RichText.:使用富文本格式(支持HTML)
- AutoText:自動(dòng)檢測(cè)文本
- MarkdownText: MarkDown格式
同時(shí)支持MarkDown格式文本
Qt::TextFormat textFormat() const
void setTextFormat(Qt::TextFormat format)
// 參考示例
msgBox.setTextFormat(Qt::RichText);
msgBox.setText("<b>這是一個(gè)富文本消息框示例。</b><br>"
"你可以使用 <i>HTML</i> 標(biāo)簽來格式化文本。<br>"
"<ul>"
"<li>項(xiàng)目1</li>"
"<li>項(xiàng)目2</li>"
"<li>項(xiàng)目3</li>"
"</ul>");Qt::TextFormat textFormat() const
void setTextFormat(Qt::TextFormat format)
// 參考示例
msgBox.setTextFormat(Qt::RichText);
msgBox.setText("<b>這是一個(gè)富文本消息框示例。</b><br>"
"你可以使用 <i>HTML</i> 標(biāo)簽來格式化文本。<br>"
"<ul>"
"<li>項(xiàng)目1</li>"
"<li>項(xiàng)目2</li>"
"<li>項(xiàng)目3</li>"
"</ul>");
消息框文本交互
textInteractionFlags: 可以通過鼠標(biāo)來進(jìn)行選中,點(diǎn)擊等操作
flages: Qt::TextInteractionFlags: 一個(gè)Qt::TextInteractionFlags的組合,用于定義文本交互的行為??梢允褂靡韵逻x項(xiàng):
- Qt::NoTextInteraction: 不允許任何文本交互。
- Qt::TextSelectableByMouse: 允許用鼠標(biāo)選擇文本。
- Qt::TextSelectableByKeyboard: 允許用鍵盤選擇文本。
- Qt::TextEditable: 允許編輯文本。
// 創(chuàng)建消息框
QMessageBox messageBox;
messageBox.setWindowTitle("信息");
messageBox.setText("這是一個(gè)示例消息框。\n"
"你可以選擇并復(fù)制這段文本。");
// 設(shè)置文本交互標(biāo)志
messageBox.setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
消息框模態(tài)
設(shè)置消息框的窗口模式,確定其在應(yīng)用程序中的行為。窗口模式控制了消息框?qū)ζ渌翱诘慕换ビ绊憽?/p>
- NonModal : 窗口是非模態(tài)的,允許用戶與其他窗口進(jìn)行交互
- WindowModal: 窗口是窗口模態(tài)的,阻止用戶與其父窗口進(jìn)行交互,直到關(guān)閉。
- ApplicationModal:窗口是應(yīng)用程序模態(tài)的,阻止用戶與應(yīng)用程序的所有窗口進(jìn)行交互,直到關(guān)閉。
// 創(chuàng)建消息框
QMessageBox messageBox;
messageBox.setWindowTitle("信息");
messageBox.setText("這是一個(gè)模態(tài)消息框。");
// 設(shè)置窗口模態(tài)性為應(yīng)用程序模態(tài)
messageBox.setWindowModality(Qt::ApplicationModal);
// 顯示消息框
messageBox.exec();






