【Qt控件之QMessageBox】详解

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适用于需要向用户显示简单信息或者进行简单交互的场景,例如程序的提示、警告以及一些基本的确认和选择操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Yuhan Blu-ray DVD Creator for Mac: 打造专属的高清视听盛宴

在如今的高清时代,谁能拒绝一款能够轻松将高清影片刻录成蓝光DVD的刻录机呢?而Yuhan Blu-ray DVD Creator for Mac正是这样一款令人惊艳的软件。 作为一款专为Mac用户打造的蓝光DVD刻录机,Yuhan Blu-ray DVD Creator for Mac支持将各种高清视…

PyQt5:构建目标检测算法GUI界面 (附python代码)

文章目录 1.界面2.代码3.Analyze 1.界面 目标检测算法一般就是检测个图片,然后显示图片结果。 最简单的情况,我们需要一个按钮读取图片,然后后有一个地方显示图片。 2.代码 import sys import numpy as np from PIL import Imagefrom PyQt…

Mybatis-Plus(企业实际开发应用)

一、Mybatis-Plus简介 MyBatis-Plus是MyBatis框架的一个增强工具,可以简化持久层代码开发MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 官网&a…

二叉树(9.7)

目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 2.二叉树概念及结构 2.1概念 2.2 特殊的二叉树 2.4 二叉树的存储结构 3.二叉树顺序结构及实现 3.1 二叉树的顺序结构 3.2 堆的概念及结构 1.树概念及结构 1.1树的概念 前面我们学习的都是组成简…

SpringBoot面试题8:运行 Spring Boot 有哪几种方式?Spring Boot 需要独立的容器运行吗?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:运行 Spring Boot 有哪几种方式? 运行Spring Boot应用有多种方式,具体取决于你的需求和环境。以下是几种常见的运行Spring Boot应用的方式: 使…

springboot+vue基于Hadoop短视频流量数据分析与可视化系统的设计与实现【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

【计算机网络】数据链路层——以太网

文章目录 前言什么是以太网以太网帧格式6位目的地址和源地址2位类型数据长度CRC 校验和 数据在数据链路层是如何转发的 前言 前面我们学习了关于应用层——自定义协议、传输层——UDP、TCP协议、网络层——IP协议,今天我将为大家分享关于数据链路层——以太网方面的…

金蝶云星空创建自动下推并保存公共服务

文章目录 金蝶云星空创建自动下推并保存公共服务创建公共方法按单下推数据按明细行下推数据调用下推操作 调用公共方法 金蝶云星空创建自动下推并保存公共服务 创建公共方法 按单下推数据 /// <summary>/// 获取单据转换数据包/// </summary>public DynamicObjec…

RIS辅助MIMO广播信道容量

RIS辅助MIMO广播信道容量 摘要RIS辅助的BC容量矩阵形式的泰勒展开学习舒尔补 RIS-Aided Multiple-Input Multiple-Output Broadcast Channel Capacity论文阅读记录 基于泰勒展开求解了上行容量和最差用户的可达速率&#xff0c;学习其中的展开方法。 摘要 Scalable algorithm…

UE4 使用材质后期 制作玻璃有雨效果

效果展示&#xff0c;其实这是一个动画效果 以上为所有逻辑 拿到TexCoord给到Panner&#xff0c;Time和Speed都是通过下面计算而来&#xff0c;后面讲&#xff0c;再拿到时间和速度值过后&#xff0c;加上扰动值&#xff0c;最后取G值&#xff0c;因为雨事从上而下的动&#xf…

【AIFEM案例操作】电器盒谐响应分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

微信小程序项目案例之导游证考试刷题小程序

前言 很多计算机专业的同学在做毕设选题时不知道该如何选题&#xff0c;有的同学是已经选择了要开发一款小程序&#xff0c;但是又不知道开发哪类小程序。本篇将为大家介绍一个小程序的开发方向&#xff0c;考试刷题类小程序是目前比较火的小程序项目之一&#xff0c;在小程序…

JavaScript基础知识19——循环结构:while循环

哈喽&#xff0c;你好&#xff0c;我是雷工。 本节学习JavaScript基础语法的循环结构&#xff1a;while循环&#xff0c;以下为学习笔记。 while循环 循环概念&#xff1a;重复执行一些操作&#xff1b; 循环特征&#xff1a;不断地重复&#xff1b; while&#xff1a;在…期间…

面向Three.js开发者的3D自动纹理化开发包

DreamTexture.js 是面向 three.js 开发者的 3D 模型纹理自动生成与设置开发包&#xff0c;可以为 webGL 应用增加 3D 模型的快速自动纹理化能力。 图一为原始模型, 图二图三为贴图后的模型。提示词&#xff1a; city, Realistic , cinematic , Front view ,Game scene graph 1、…

Kitex踩坑 [Error] KITEX: processing request error,i/o timeout

报错问题 2023/010/28 17:20:10.250768 default_server_handler.go:234: [Error] KITEX: processing request error, remoteService, remoteAddr127.0.0.1:65425, errordefault codec read failed: read tcp 127.0.0.1:8888->127.0.0.1:65425: i/o timeout 分析原因 Hert…

基于dockerfile搭建lnmp

目录 任务需求&#xff1a; 一、规划&#xff1a; 二、准备&#xff1a; 三、部署nginx容器&#xff08;172.18.0.10&#xff09;&#xff1a; 1.编写Dockerfile构建镜像&#xff1a; 2.准备nginx配置文件&#xff1a; 3.构建镜像&#xff0c;启动nginx容器&#xff1a; 四…

【QT】事件分发器

event事件分发器&#xff0c;用于分发事件&#xff0c;在这里也可以做拦截&#xff0c;返回值boo。如果返回的是true代表拦截处理&#xff0c;不再向下分发。 展示事件拦截 上一段代码&#xff1a;【QT】鼠标常用事件-CSDN博客 代码 // 事件分发器 // 拦截鼠标按下 // QEven…

四十二、【进阶】

目录 1、覆盖索引 2、案例分析 &#xff08;1&#xff09;select * 查询 &#xff08;2&#xff09;使用字段查询 &#xff08;3&#xff09;性能差异原因 3、分析 &#xff08;1&#xff09;主键id查询 &#xff08;2&#xff09;覆盖索引 1、覆盖索引 简单点说&#x…

Nginx 部署多个安全域名,多个服务【工作记录】

以下是本人通过Docker 部署的Nginx挂载出来的文件目录 先看下 nginx.conf 配置文件内容&#xff1a;如下 ps&#xff1a;当前文件就是安装后的初始内容&#xff0c;无修改。主要关注最后一行 include /etc/nginx/conf.d/*.conf;表示引入其他目录下的.conf配置文件&#xff1b;…

【Arduino环境下驱动合宙esp32c3单片机基本外设】

【esp32c3基本外设驱动】 1. GPIO调试1.1 源码分享2.2 实验效果 2. ADC调试2.1 源码分享2.2 实验效果 3. WS2812驱动3.1 源码分享3.2 实验效果 4. 旋转编码器4.1 源码分享4.2 测试效果 5. SSD1306屏幕驱动5.1 源码分享5.2 测试效果 6. 双cpu同时工作测试6.1 源码分享6.2 测试效…