Qt中QMessageBox的用法---看这一篇就够了

2023-05-16

一、详细说明

QMessageBox类提供一个模态对话框,用于通知用户或询问用户一个问题并接收答案。
消息框显示一个主要文本,用于向用户提示某个情况;显示一个信息文本,用于进一步解释警报或向用户询问问题;显示一个可选的详细文本,用于在用户请求时提供更多数据。消息框还可以显示用于接受用户响应的图标和标准按钮。
提供了两个用于使用QMessageBox的API,即基于属性的API和静态函数。调用其中一个静态函数比较简单

1.基于属性的API

要使用基于属性的API,请构造QMessageBox的一个实例,设置所需的属性,并调用exec()来显示消息。最简单的配置是仅设置message text属性。

 QMessageBox msgBox;
 msgBox.setText("The document has been modified.");
 msgBox.exec();

用户必须单击OK按钮来取消消息框。在消息框被取消之前,GUI的其余部分将被阻塞。
在这里插入图片描述
除了提醒用户注意某个事件之外,还有一种更好的方法,那就是询问用户应该怎么做。将问题存储在信息文本属性中,并将标准按钮属性设置为您希望的按钮集,即用户响应集。通过使用按位或操作符组合来自StandardButtons的值来指定按钮。按钮的显示顺序依赖于平台。例如,在Windows上,Save显示在Cancel的左边,而在Mac OS上,顺序相反。
将一个标准按钮标记为默认按钮。

  QMessageBox msgBox;
  msgBox.setText("The document has been modified.");
  msgBox.setInformativeText("Do you want to save your changes?");
  msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
  msgBox.setDefaultButton(QMessageBox::Save);
  int ret = msgBox.exec();

在这里插入图片描述
exec()槽返回被单击按钮的StandardButtons值。

  switch (ret) {
    case QMessageBox::Save:
        // Save was clicked
        break;
    case QMessageBox::Discard:
        // Don't Save was clicked
        break;
    case QMessageBox::Cancel:
        // Cancel was clicked
        break;
    default:
        // should never be reached
        break;
  }

要为用户提供更多信息以帮助他回答问题,请设置详细文本属性。如果设置了详细文本属性,则显示详细信息…按钮将显示。
在这里插入图片描述
点击显示详情…按钮显示详细的文本。
在这里插入图片描述

富文本和文本格式属性

详细文本属性总是被解释为纯文本。主文本和信息文本属性可以是纯文本,也可以是富文本。这些字符串是根据文本格式属性的设置来解释的。默认设置是auto-text。
注意,对于一些包含XML元字符的纯文本字符串,自动文本富文本检测测试可能会失败,从而导致您的纯文本字符串被错误地解释为富文本。在这些罕见的情况下,可以使用Qt:: convertfrom明文()将纯文本字符串转换为可视的等效富文本字符串,或者使用setTextFormat()显式地设置文本格式属性。

严重程度和图标和像素图属性

QMessageBox支持四种预定义的消息严重级别或消息类型,它们实际上只在它们各自显示的预定义图标中有所不同。通过将icon属性设置为预定义图标之一来指定四种预定义的消息类型之一。以下为指引:
在这里插入图片描述
预定义的图标不是由QMessageBox定义的,而是由样式提供的。默认值是No Icon。否则,所有情况下的消息框都是相同的。使用标准图标时,请使用表中推荐的图标,或使用平台样式指南推荐的图标。如果没有一个标准图标适合您的消息框,您可以通过设置icon pixmap属性而不是设置icon属性来使用自定义图标。
总之,要设置图标,可以对标准图标之一使用setIcon(),也可以对自定义图标使用setIconPixmap()。

2.静态函数API

尽管使用静态函数API构建消息框很方便,但是它不如使用基于属性的API灵活,因为静态函数签名缺少设置信息文本和详细文本属性的参数。一种解决方法是使用title参数作为消息框的主要文本,文本参数作为消息框的信息文本。因为这样做有一个明显的缺点,即使消息框的可读性降低,所以平台指南不推荐这样做。Microsoft Windows用户界面指南建议使用应用程序名称作为窗口的标题,这意味着如果您的主文本之外还有内容丰富的文本,则必须将其连接到文本参数。

请注意,静态函数签名的按钮参数已经发生了变化,这些参数现在用于设置标准按钮和默认按钮。

静态函数可用于创建信息()、问题()、警告()和关键()消息框。

 int ret = QMessageBox::warning(this, tr("My Application"),
                                 tr("The document has been modified.\n"
                                    "Do you want to save your changes?"),
                                 QMessageBox::Save | QMessageBox::Discard
                                 | QMessageBox::Cancel,
                                 QMessageBox::Save);

在这里插入图片描述
标准对话框示例展示了如何使用QMessageBox和其他内置的Qt对话框。

高级用法

如果标准按钮对于消息框不够灵活,可以使用addButton()重载,它接受文本和ButtonRole来添加自定义按钮。QMessageBox使用ButtonRole来确定屏幕上按钮的顺序(根据平台的不同而有所不同)。您可以在调用exec()之后测试clickedButton()的值。例如,

  QMessageBox msgBox;
  QPushButton *connectButton = msgBox.addButton(tr("Connect"), QMessageBox::ActionRole);
  QPushButton *abortButton = msgBox.addButton(QMessageBox::Abort);

  msgBox.exec();

  if (msgBox.clickedButton() == connectButton) {
      // connect
  } else if (msgBox.clickedButton() == abortButton) {
      // abort
  }

在这里插入图片描述

默认和转义键

默认按钮(即,当按下Enter键时激活的按钮)可以使用setDefaultButton()来指定。如果没有指定默认按钮,QMessageBox将根据消息框中使用的按钮的按钮角色尝试查找一个按钮。
可以使用setEscapeButton()指定escape按钮(按下Esc时激活的按钮)。如果没有指定转义按钮,QMessageBox会尝试使用以下规则找到一个转义按钮:
1.如果只有一个按钮,它是按下Esc时激活的按钮。
2.如果有一个取消按钮,它是当Esc被按下时激活的按钮。
3.如果只有一个按钮具有拒绝角色或No角色,则在按下Esc时激活该按钮。
当无法使用这些规则确定转义按钮时,按Esc没有效果。
参见QDialogButtonBox, GUI设计手册:消息框,标准对话框示例和应用程序示例。

二、成员类型的文档

enum QMessageBox::ButtonRole

此枚举描述可用于描述按钮框中的按钮的角色。这些角色的组合就像用来描述其行为的不同方面的标志。

ConstantValueDescription
QMessageBox::InvalidRole-1按钮无效。
QMessageBox::AcceptRole0单击按钮将使对话框被接受(例如,OK)。
QMessageBox::RejectRole1点击按钮会导致对话框被拒绝(例如取消)。
QMessageBox::DestructiveRole2点击按钮会导致破坏性的改变(例如,丢弃改变)并关闭对话框。
QMessageBox::ActionRole3单击该按钮将导致对话框中的元素发生更改。
QMessageBox::HelpRole4可以单击该按钮以请求帮助。
QMessageBox::YesRole5按钮是一个类似“是”的按钮。
QMessageBox::NoRole6这个按钮是一个类似“不”的按钮。
QMessageBox::ApplyRole8该按钮应用当前更改。
QMessageBox::ResetRole7The button applies current changes.

enum QMessageBox::Icon

该枚举具有以下值:
在这里插入图片描述

enum QMessageBox::StandardButton

flags QMessageBox::StandardButtons

这些枚举描述了标准按钮的标志。每个按钮都有一个定义好的ButtonRole。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中QMessageBox的用法---看这一篇就够了 的相关文章

随机推荐

  • MCUXpresso调试FreeRTOS时显示多线程

    多线程程序调试起来确实麻烦 xff0c 在调试过程中默认只能看到当前线程 按照以下配置即可在程序暂停时查看多线程的状态 xff1a 在debug配置中选中下图所示 xff1a 配置完成后再调试程序即可显示多线程
  • px4 编译生成msg消息机制及将其移植方法

    目录 一 在px4中添加新的Topic 二 px4生成msg生成的结构体优势 三 msg生成工具及移植方法 一 在px4中添加新的Topic 在px4中是通过uorb进行消息的传递 xff0c 通过根目录下的msg文件可以添加自定义的消息
  • px4传感器数据sensor模块整理

    涉及传感器数据的流程 xff0c 大致整理如下图 传感器的数据从drivers中调用lib中dirvers对应的对象更新数据并发布出去 xff0c sensor模块通过订阅原始数据和校准参数 xff0c 对数据滤波并更正 xff0c 然后再
  • C#实现程序一次打开两个窗口,两个窗口分别放置在两个屏幕

    这是本人在编程中碰到的一个问题 xff0c 寻找了其他案例 xff0c 都只是同时打开两窗口 xff0c 但不能实现在拥有两块显示屏时候 xff0c 分别将两个不同的窗口显示在两个单独的屏幕 源代码https download csdn n
  • 探寻C#事件本质

    我最先在学习C 事件的时候 xff0c 阅读了许多书籍 xff0c 但总是不能对事件建立起一个比较清晰的概念 xff0c 对其内部机制和原理也是似是而非 xff0c 因为这些书籍在描述事件的时候总是夹杂许多其他不能理解的抽象术语 xff0c
  • C#chart绘折线图动态添加数据

    C 入门基础 xff0c 实现chart控件动态添加数据 源程序https download csdn net download qq 42237381 10742048 目录 一 效果示意 二 原理说明 三 代码参考 一 效果示意 最终程
  • C#Winform程序制作仿真地平仪,磁罗盘飞行仪表盘

    因为项目需要做一个电子飞行仪表盘包括地平仪和磁罗盘 xff0c 网上找了很久 xff0c 没有找到一个合适的控件 xff0c 就学习了一些图形处理的开源代码做一个简陋的仪表盘来使用 xff0c 希望对其他人有帮助 xff0c 如果有好的建议
  • pixhawk学习

    原文转载至https blog csdn net u013181595 article details 80976610 1硬件架构分析 Pixhawk是一款基于ARM芯片的32位开源飞控 xff0c 由ETH的computer visio
  • 由浅入深对卡尔曼滤波的学习

    原文来自http shequ dimianzhan com articles 337 extended kalman filter course from shallow to deep 搬运过来好好学习 本篇译文翻译自 The Exten
  • px4中mixer_multirotor.cpp混控程序解读

    目录 一 函数说明 二 具体步骤 1 简单混控无边界 无边界输出 不混合偏航 2 限幅 3 加入比例缩放和偏航 使输出范围限制在 0 1 4 融合怠速处理 一 函数说明 混控函数在MIX函数 MultirotorMixer mix floa
  • pixhawk飞控板基于px4程序中串口调试打印数据的方法

    px4程序模块化非常的清晰 但程序也是非常的庞大 不同于一般程序员的编程惯例 所谓程序入参出参直白明显 px4的程序大多采用全局变量 而且使用UORB的通讯 使程序调用非常方便 但是使程序的可读性降低了很多 没有花一定的时间去研读很难看懂程
  • 安装win10和Ubuntu双系统开机启动项问题总结

    补充一下 xff0c 前面这是几年前刚开始用双系统的写的博客 xff0c 经验少 xff0c 但也适用于新电脑安装快 xff0c 在老电脑上装ubuntu不用这么麻烦了直接看后面的 目录 新电脑 xff08 系统没啥东西 xff09 自动分
  • pixhawk飞控板添加额外pwm输出通道控制开伞或舵机转动实现功能

    学习大佬的文章 xff0c 贴图来用 https blog csdn net dai93 article details 89852241 这是输出流的大致示意 如果在飞控需要控制单独的舵机 xff0c 可以自定义一个pwm通道输出 xff
  • px4 实现发送自定义mavlink协议消息解锁飞控板以及切换飞行模式

    原理 xff1a 通过mavlink控制台可以执行命令 xff0c 在循环中调用控制台指令的函数就行了 查阅commander文件下 所有模式切换都在commder main函数 int commander main int argc ch
  • pixhawk配置垂直起降无人机

    我使用的版本里面没有找到 43 型尾座式垂直起降无人机 就先用x型无人机了 查看代码 发现在init d目录下id号为13003 待续
  • 关于def __init__(self)

    首先说明一下 xff0c def init self 是用于初始化类 但是我们实际程序阅读过程中会发现 xff0c 这部分经常有两种状况 1 def init self xff0c 不带参数 xff0c 此处借鉴另一位博主的程序做一下分析
  • 《机器学习》周志华 集成学习

    8 1个体集成 个体学习器可以由 C4 5决策树算法 BP神经网络等 来训练 个体学习器 同质 gt 叫基学习器 也叫弱学习器 指泛化性能略优于随机猜测的学习器 xff0c 如二分类问题上精度略高于50 的分类器 相应的算法叫做 基学习算法
  • 【Windows内核编程】Win10/Win11通过PspCidTable取得EProcess

    温馨提示 本文的内容均在Windows 11 Enterprise 22000 466 版本下测试 不同版本的部分内容可能存在差异 xff0c 但万变不离其中 Upadate 20220803 经测试 xff0c 本文内容目前向下兼容 正文
  • 自抗扰控制的入门学习(一)—— 前言

    自抗扰控制的入门学习 xff08 一 xff09 前言 与很多人一样 xff0c 接触这个算法之后心态也经历过 xff0c 从一开始的 不明觉厉 xff0c 中途的 不以为然 xff0c 到最后的 辩证看待 的演变过程 借用别人的话 xff
  • Qt中QMessageBox的用法---看这一篇就够了

    一 详细说明 QMessageBox类提供一个模态对话框 xff0c 用于通知用户或询问用户一个问题并接收答案 消息框显示一个主要文本 xff0c 用于向用户提示某个情况 显示一个信息文本 xff0c 用于进一步解释警报或向用户询问问题 显