【Qt控件之QMessageBox】详解

news2024/11/17 11:38:05

Qt控件之QMessageBox

      • 描述
        • 基于属性的API
        • 富文本和文本格式属性
        • 严重程度以及图标和Pixmap属性
        • 静态函数API
      • 高级用法
      • 默认按钮和退出按钮
      • 示例
      • 使用场景

描述

QMessageBox类提供了一个模态对话框,用于通知用户或向用户提问并接收答案。

消息框显示一个主要文本以提醒用户注意某个情况,显示一个信息性文本以进一步解释该提醒或向用户提问,显示一个可选的详细文本以在用户请求时提供更多数据。
消息框还可以显示一个图标和标准按钮以接受用户响应。
提供了两个使用QMessageBoxAPI,基于属性的API静态函数。调用其中一个静态函数是一种更简单的方法,但与使用基于属性的API相比,它的灵活性较差,结果信息量也较少。建议使用基于属性的API

基于属性的API

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

QMessageBox msgBox;
msgBox.setText("文档已被修改。");
msgBox.exec();

用户必须单击“确定”按钮才能关闭消息框。在消息框关闭之前,其余的 GUI 会被阻止。
在这里插入图片描述
除了提醒用户事件之外,更好的方法是询问用户如何处理该事件。将问题存储在信息文本属性中,并将标准按钮属性设置为希望用户响应的按钮集。按钮是通过使用位或运算符将标准按钮的值组合在一起来指定的。按钮的显示顺序取决于平台。例如,在Windows上,保存显示在取消的左侧,而在Mac OS上,顺序相反。
将你的标准按钮之一标记为默认按钮。

QMessageBox msgBox;
msgBox.setText("文档已被修改。");
msgBox.setInformativeText("是否要保存更改?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox. defaultButton(QMessageBox::Save);
int ret = msgBox.exec();

这是macOS指南中推荐的方法。类似的指南适用于其他平台,但请注意不同平台处理信息文本的不同方式。
在这里插入图片描述

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;
  }

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

富文本和文本格式属性

详细的文本属性始终被解释为纯文本。主要文本和信息文本属性可以是纯文本或富文本。这些字符串根据文本格式属性的设置进行解释。默认设置为自动文本。
请注意,对于一些包含XML元字符的纯文本字符串,自动文本富格文本检测测试可能会失败,导致您的纯文本字符串被错误地解释为富格文本。在这些罕见的情况下,使用Qt::convertFromPlainText()将纯文本字符串转换为视觉上等效的富格文本字符串,或使用 textsFormat()显式设置文本格式属性。

严重程度以及图标和Pixmap属性

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

静态函数API

尽管使用静态函数API构建消息框很方便,但它的灵活性比不上基于属性的API,因为静态函数的签名缺少用于设置信息文本和详细文本属性的参数。解决这个问题的一种办法是将标题参数用作消息框的主要文本,将文本参数用作消息框的信息文本。因为这会使消息框的易读性降低,所以平台指南不建议这样做。Microsoft Windows用户界面指南建议使用应用程序名称作为窗口的标题,这意味着如果您除了主文本之外还有信息文本,必须将其连接到文本参数中。
请注意,静态函数的签名相对于其按钮参数已经发生了变化,现在这些按钮参数用于设置标准按钮和默认按钮。
静态函数可用于创建information(), question(), warning(),和 critical()消息框。

  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,以添加自定义按钮。 ButtonRoleQMessageBox 使用,用于确定屏幕上按钮的顺序(根据平台而有所不同)。您可以在调用 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
  }

默认按钮和退出按钮

默认按钮(即按下回车键时激活的按钮)可以使用setDefaultButton()方法来指定。如果未指定默认按钮,QMessageBox会根据消息框中使用的按钮的角色来查找一个默认按钮。
退出按钮(按下Esc键时激活的按钮)可以使用setEscapeButton()方法来指定。如果未指定逃逸按钮,QMessageBox会照以下规则来查找:
如果只有一个按钮,则该按钮为按下Esc键时激活的按钮。
如果存在一个取消按钮,则该按钮为按下Esc键时激活的按钮。
如果存在一个拒绝角色或者无角色的按钮,则该按钮为按下Esc键时激活的按钮。
当无根据上述规则确定退出按钮时,按下Esc键将没有任何效果。

示例

开发时,如果有两个按钮设置为中文,则右上角的窗口关闭按钮无法使能,以下是解决方案:

    QMessageBox msgBox;
    msgBox.setText("当前显示一个按钮");
    msgBox.setInformativeText("此行是信息文本");
    msgBox.addButton("确定", QMessageBox::YesRole);
    msgBox.addButton("取消", QMessageBox::NoRole);
    msgBox.exec();
    // 点击的按钮
    QAbstractButton* pBtn = msgBox.clickedButton();

在这里插入图片描述

使用场景

QMessageBox的常见使用场景:

  1. 提示信息:可以通过QMessageBox显示一条简单的提示信息,比如告知用户某个操作已经完成或者出错了。

  2. 警告信息:可以使用QMessageBox显示警告信息,警示用户某个操作可能会带来一些风险或者不符合预期。

  3. 错误信息:当程序出现错误时,可以使用QMessageBox显示错误信息,告知用户发生了什么问题以及如何处理。

  4. 确认对话框:如果需要用户确认一个操作,可以使用QMessageBox显示确认对话框,询问用户是否继续。

  5. 询问对话框:有时候需要从用户那里获取一些简单的选择,比如是否保存修改,可以使用QMessageBox显示询问对话框以获取用户的选择。

  6. 提示输入:可以使用QMessageBoxQInputDialog结合,用于提示用户输入一些简单的文本或者进行选择。

总的来说,QMessageBox适用于需要向用户显示简单信息或者进行简单交互的场景,例如程序的提示、警告以及一些基本的确认和选择操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1155992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试 —— 冒烟测试(Smoke Test,ST)

1. 核心 冒烟测试就是完成一个新版本的开发后,对该版本最基本的功能进行测试,保证基本的功能和流程能走通。 如果不通过,则打回开发那边重新开发; 如果通过测试,才会进行下一步的测试(功能测试,集成测试&a…

SQLyog连接数据库报plugin caching_sha2_password could not be loaded......解决方案

问题描述 问题分析 因为MySQL新版默认使用caching_sha2_password作为身份验证的插件,而旧版本使用的是mysql_native_password。当出现plugin caching_sha2_password could not be loaded报错,我们更换为旧版本 如何解决 先使用cmd命令登录MySQL&a…

从零开始的LINUX(四)

1.yum: 功能:软件包管理器,功能类似与手机上的应用商店。通过yum可以获取指令的下载地址,然后一键式安装指令。由于yum中的地址一般都是外网的,所以需要镜像源(即国内的下载地址)。 相关指令&…

2023最网最全软件测试基础知识【建议收藏】

​对于一个软件来说,总会存在各种各样的软件缺陷。因此我们需要通过软件测试来检查软件中存在的各种问题。 在下面的这篇文章中,将讲解软件测试的基础知识,让我们一起来了解一下吧 一、 软件缺陷的概述 1、什么是软件缺陷 ​ 软件缺陷就是…

博弈论学习笔记(3)——完全信息动态博弈

前言 在这个部分,我们学习的是完全信息动态博弈。主要内容包括扩展式博弈、子博弈精炼Nash均衡、重复博弈和子博弈精炼Nash均衡的应用。 一、扩展式博弈 1、扩展式博弈 1)扩展式博弈是什么 扩展式博弈是博弈问题的一种规范性描述,扩展式博…

【MATLAB源码-第64期】matlab基于DWA算法的机器人局部路径规划包含动态障碍物和静态障碍物。

操作环境: MATLAB 2022a 1、算法描述 动态窗口法(Dynamic Window Approach,DWA)是一种局部路径规划算法,常用于移动机器人的导航和避障。这种方法能够考虑机器人的动态约束,帮助机器人在复杂环境中安全、…

java面向对象编程高级

1、static修饰符 1.1static修饰成员变量 static叫静态,可以修饰成员变量、成员方法 成员变量按照有无static修饰,分为两种 类变量 : 有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享 在开发中&#…

处理固定资产折旧报错 AFAB “根据记帐循环, 您必须接下来对期间 001记帐”

会计在运用进行固定资产折旧时,发现有个报错“根据记帐循环, 您必须接下来对期间 001记帐”, 根据记帐循环, 您必须接下来对期间 001记帐 消息编号 AA683 诊断 不可以在指定的期间过帐折旧,因为此操作会遗漏过帐期间。 系统响应 该期间不能进…

Nginx域名重定向(如何访问的域名和实际的数据请求路径不同,可解决前端跨域)

感情需要被抑制,不能泛滥… 当需要将一个域名重定向到另一个域名并且用户仍然看到原始域名时,Nginx是一个强大的工具。这种场景通常涉及到反向代理或重写URL的技巧。在本篇博客中,我们将详细介绍如何使用Nginx来实现这个目标,以及…

SPSS两独立样本t检验

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

VOD: 视频共享点播服务实现

目录 一.项目背景及原理 1.背景 2.原理 二.技术栈及项目环境 1.技术栈 2.项目环境 三. 模块划分 四.遇到的问题及其解决方法 1.查询视频模糊匹配问题 2.前端界面的修改 五.项目预览 六. 最终版代码 前言: 这里实现一个视频点播服务, 可以用来上传视频, 下载视频, 删…

springboot读取application.properties中文乱码问题

目录 1 前言: 2 本地环境中的解决方案(以idea为例) 3 全部解决方案 1 前言: 初用properties,读取java properties文件的时候如果value是中文,会出现乱码的问题。我们首先需要明了乱码问题的根源。在 Java 中&#x…

基于jsp,ssm物流快递管理系统

开发工具:eclipse,jdk1.8 服务器:tomcat7.0 数据库:mysql5.7 技术: springspringMVCmybaitsEasyUI 项目包括用户前台和管理后台两部分,功能介绍如下: 一、用户(前台)功能: 用…

Servlet 上下文参数

7)Servlet上下文对象:ServletContext生活中的例子:张三和李四在不远处窃窃私语,并且频繁的对着你坏笑。你肯定会跑过去问:你们俩在聊什么?注意:此处的聊什么,其实就是你在咨询他们聊天的上下文&…

九河云多云管理平台优劣势分析,使用评测!

多数情况下,仅依靠公有云不足以支撑企业发展。企业的某些特定需求还需要继续依赖私有云和传统IT服务。混合、多云架构往往是企业的唯一选择,但其设置和运行却非常复杂,为了管理混合架构,大多数企业已逐步转向多云模式,…

Spring Task(定时任务)框架

文章目录 一、Spring Task介绍二、cron表达式1.cron表达式介绍2.cron表达式在线生成器 三、fixedDelay四、fixedRate五、initialDelay六、Spring Task的使用1.导入maven坐标spring-context2.启动类添加注解EnableScheduling开启任务调度3.自定义定时任务类 一、Spring Task介绍…

Realtek 5G pcie网卡 RTL8126-CG简介

总shu:PCIE 5G网卡方案“RTL8126-CG”采用QFN56封装,面积8 x 8毫米,非常小巧,提供一个RJ-45网口、两个USB 3.x接口。它走的是PCIe 3.0 x1系统通道,搭配超五类网线,可以在长达100米的距离上提供满血的5Gbps网…

Jmeter性能测试入门之常用组件

一个jmeter的脚本通常包含线程组取样器断言定时器逻辑控制器配置元件监听器 线程组部分用法介绍: 【普通线程组】: **线程数:**可以理解为虚拟用户数 **Ramp-Up时间(秒):**运行指定线程数需要的时间 **循环次数:**勾…

java基础+数据库基础+系统+JVM问题

的哎的哎 1、基础部分 java线程池 队列的选择 答&#xff1a; SingleThreadPool:适用于多个任务顺序执行的场景。 它使用的是LinkedBlockingQueue<>()&#xff0c;无界的阻塞队列&#xff0c;就意味着会有内存溢出的风险。 FixedThreadPool: 适用于任务量固定耗时长的…

QDDR究竟是什么?

QDDR究竟是什么? 在当今的高科技时代&#xff0c;我们经常遇到各种各样的缩写和术语&#xff0c;其中QDDR就是其中一个。那么&#xff0c;究竟什么是QDDR呢&#xff1f; QDDR&#xff0c;全称Quad Data Rate&#xff0c;是一种同步动态随机存储器&#xff08;SDRAM&#xff09…