聊一聊 QMessageBox 的高级用法

开发
设置消息框的窗口模式,确定其在应用程序中的行为。窗口模式控制了消息框对其他窗口的交互影响。

QMessageBox高级用法

// 可以使用 setDefaultButton 来指定默认按钮 即按下Enter时激活的按钮
// 可以使用setEscapeButton() 指定escape按钮(按下Esc时激活的按钮)
QMessageBox msgBox;
// 设置LOGO
msgBox.setIcon(QMessageBox::Information); // 设置图标
msgBox.setWindowTitle("Messagebox测试"); // 设置标题
// 设置自定义图标
// msgBox.setIcon(QIcon(":/path/to/your/icon.png"));
// 创建自定义图标的 QPixmap 对象
//QPixmap customIcon(":/path/to/your/icon.png"); // 请确保路径正确并已包含在 Qt 资源文件中
// 设置自定义的图标
//msgBox.setIconPixmap(customIcon);
msgBox.setText(title);
msgBox.setInformativeText(Information); // 向用户提供更多详细信息
msgBox.setDetailedText(detail); // 设置此属性,就会出现 show Detail按钮,点击之后,呈现Detail详细信息
// setTextFormat 设置显示的文本格式 将文本格式化为纯文本或富文本(如 HTML 格式),从而能够更灵活地展示信息。
msgBox.setTextFormat(Qt::RichText);
msgBox.setText("<b>这是一个富文本消息框示例。</b><br>"
               "你可以使用 <i>HTML</i> 标签来格式化文本。<br>"
               "<ul>"
               "<li>项目1</li>"
               "<li>项目2</li>"
               "<li>项目3</li>"
               "</ul>");

// 设置标准按钮
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Discard); // 启动弹窗时 默认的按钮
msgBox.setEscapeButton(QMessageBox::Cancel); // 点击ESC按钮激活的按钮
// 添加复选框
QCheckBox *box = new QCheckBox("我同意条款和条件");
msgBox.setCheckBox(box);
// 添加按钮
msgBox.addButton("ApplyRole",QMessageBox::ApplyRole);

// 设置文本交互标志
msgBox.setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
// 设置MessageBox的应用程序模态
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;
}

呈现内容

设置详细信息区域中显示文本

文本将被解释为纯文本。默认情况下,此属性包含空字符串。

设置之后会出现 查看详细信息的 文本按钮:

QString detailedText() const
void setDetailedText(const QString &text)

设置图标

用于显示实际图标的pixmap取决于当前的GUI样式。也可以通过设置icon pixmap属性为图标设置自定义pixmap。

QMessageBox::Icon icon() const
void setIcon(QMessageBox::Icon)
// 参考图标
QMessageBox::NoIcon
QMessageBox::Question
QMessageBox::Information
QMessageBox::Warning
QMessageBox::Critical
// 使用实例
msgBox.setIcon(QMessageBox::Information); // 设置图标
// 设置自定义图标
// msgBox.setIcon(QIcon(":/path/to/your/icon.png"));

修改图标

消息框当前使用的图标。请注意,通常很难绘制一个在所有GUI样式中都合适的pixmap;您可能需要为每个平台提供不同的pixmap。默认情况下,此属性未定义。

QPixmap iconPixmap() const
void setIconPixmap(const QPixmap &pixmap)
    
// 使用示例
// 创建自定义图标的 QPixmap 对象
QPixmap customIcon(":/path/to/your/icon.png"); // 请确保路径正确并已包含在 Qt 资源文件中
// 设置自定义的图标
msgBox.setIconPixmap(customIcon);

更完整描述信息性文本

信息的text可用于展开text() ,以向用户提供更多信息。在Mac上,此文本以系统小字体显示在text() 下方。在其他平台上,它只是附加到现有文本中。默认情况下,此属性包含空字符串。

QString informativeText() const
void setInformativeText(const QString &text)

标准按钮集合

此属性控制消息框使用的标准按钮。默认情况下,此属性不包含标准按钮。

QMessageBox::StandardButtons standardButtons() const
void setStandardButtons(QMessageBox::StandardButtons buttons)

保存显示的消息框文本

文本将被解释为纯文本或富文本,具体取决于文本格式设置(QMessageBox::textFormat)。默认设置为Qt::AutoText,即消息框将尝试自动检测文本的格式。此属性的默认值为空字符串。

QString text() const
void setText(const QString &text)

添加复选框按钮

// 添加复选框
QCheckBox *box = new QCheckBox("我同意条款和条件");
msgBox.setCheckBox(box);

消息框文本格式

setTextFormat:消息框使用的当前文本格式。有关可能选项的说明,请参见Qt::TextFormat枚举。默认格式是Qt::AutoText。

  • PlainText: 使用纯文本格式
  • RichText.:使用富文本格式(支持HTML)
  • AutoText:自动检测文本
  • MarkdownText: MarkDown格式

同时支持MarkDown格式文本

Qt::TextFormat textFormat() const
void setTextFormat(Qt::TextFormat format)
// 参考示例
msgBox.setTextFormat(Qt::RichText);
msgBox.setText("<b>这是一个富文本消息框示例。</b><br>"
               "你可以使用 <i>HTML</i> 标签来格式化文本。<br>"
               "<ul>"
               "<li>项目1</li>"
               "<li>项目2</li>"
               "<li>项目3</li>"
               "</ul>");Qt::TextFormat textFormat() const
void setTextFormat(Qt::TextFormat format)
// 参考示例
msgBox.setTextFormat(Qt::RichText);
msgBox.setText("<b>这是一个富文本消息框示例。</b><br>"
               "你可以使用 <i>HTML</i> 标签来格式化文本。<br>"
               "<ul>"
               "<li>项目1</li>"
               "<li>项目2</li>"
               "<li>项目3</li>"
               "</ul>");

消息框文本交互

textInteractionFlags: 可以通过鼠标来进行选中,点击等操作

flages: Qt::TextInteractionFlags:   一个Qt::TextInteractionFlags的组合,用于定义文本交互的行为。可以使用以下选项:

  • Qt::NoTextInteraction: 不允许任何文本交互。
  • Qt::TextSelectableByMouse: 允许用鼠标选择文本。
  • Qt::TextSelectableByKeyboard: 允许用键盘选择文本。
  • Qt::TextEditable: 允许编辑文本。
// 创建消息框
QMessageBox messageBox;
messageBox.setWindowTitle("信息");
messageBox.setText("这是一个示例消息框。\n"
                   "你可以选择并复制这段文本。");

// 设置文本交互标志
messageBox.setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);

消息框模态

设置消息框的窗口模式,确定其在应用程序中的行为。窗口模式控制了消息框对其他窗口的交互影响。

  • NonModal :  窗口是非模态的,允许用户与其他窗口进行交互
  • WindowModal: 窗口是窗口模态的,阻止用户与其父窗口进行交互,直到关闭。
  • ApplicationModal:窗口是应用程序模态的,阻止用户与应用程序的所有窗口进行交互,直到关闭。
// 创建消息框
QMessageBox messageBox;
messageBox.setWindowTitle("信息");
messageBox.setText("这是一个模态消息框。");

// 设置窗口模态性为应用程序模态
messageBox.setWindowModality(Qt::ApplicationModal);

// 显示消息框
messageBox.exec();
责任编辑:赵宁宁 来源: 瓶子的跋涉
相关推荐

2021-08-04 09:32:05

Typescript 技巧Partial

2023-07-06 13:56:14

微软Skype

2023-12-14 11:35:32

.NET泄露模式

2020-09-08 06:54:29

Java Gradle语言

2023-09-22 17:36:37

2021-01-28 22:31:33

分组密码算法

2020-05-22 08:16:07

PONGPONXG-PON

2021-08-01 09:55:57

Netty时间轮中间件

2023-09-27 16:39:38

2018-06-07 13:17:12

契约测试单元测试API测试

2021-03-01 18:37:15

MySQL存储数据

2021-12-06 09:43:01

链表节点函数

2021-07-16 11:48:26

模型 .NET微软

2023-09-20 23:01:03

Twitter算法

2023-05-15 08:38:58

模板方法模式

2022-08-08 08:25:21

Javajar 文件

2019-02-13 14:15:59

Linux版本Fedora

2018-11-29 09:13:47

CPU中断控制器

2021-02-06 08:34:49

函数memoize文档

2021-01-29 08:32:21

数据结构数组
点赞
收藏

51CTO技术栈公众号