【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 clickedbreak;case QMessageBox::Discard:// Don't Save was clickedbreak;case QMessageBox::Cancel:// Cancel was clickedbreak;default:// should never be reachedbreak;}

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

富文本和文本格式属性

详细的文本属性始终被解释为纯文本。主要文本和信息文本属性可以是纯文本或富文本。这些字符串根据文本格式属性的设置进行解释。默认设置为自动文本。
请注意,对于一些包含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.rhkb.cn/news/175910.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从小白到精通:揭秘perf工具的全部功能与操作技巧

揭秘perf工具的全部功能与操作技巧 一、引言二、理解perf工具的基本概念三、安装与配置perf工具3.1、不同操作系统的perf工具安装3.2、perf工具的配置选项和环境设置 四、perf工具的常用命令和功能4.1、perf工具的基本命令结构和常用参数4.2、perf工具的常见用法和功能4.3、per…

解决恶意IP地址攻击:保卫网络安全的有效方法

随着互联网的发展,网络安全威胁变得日益复杂,其中包括恶意IP地址攻击。这些攻击通常是网络犯罪分子的手段之一,用于入侵系统、窃取数据或进行其他恶意活动。本文将探讨如何解决恶意IP地址攻击,以保护网络安全。 恶意IP地址攻击是…

关于测试组件junit切换testng的示例以及切换方式分享

文章目录 概要首先看看junit和testng的区别实践篇摸拟业务逻辑代码简单对象数据层摸拟类业务逻辑层摸拟类后台任务摸拟类 基于springmockjunit基于springmocktestng 示例的差异点junit与testng的主要变动不大,有以下几个点需要注意注解部分在before,after中testng多出按配置执行…

华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)

第101题 LSR对收到的标签进行保留,且保留方式有多种,那么以下关于LDP标签保留一自由方式的说法 A、保留邻居发送来的所有标签 B、需要更多的内存和标签空间 C、只保留来自下一跳邻居的标签,丢弃所有非下一跳铃邻居发来的标签 D、节省内存和标签空间 E、当IP路由收敛、下一跳…

verilog语言学习

1. 时延 2. 一位全加器设计:三种建模方式 实际的设计中往往是这三种设计模式的混合 3. 4. 5. 6. 7. 建立模型时信号的连接(重点) 8. initial语句 9. always语句 在always中不能同时判断同一个信号的上升沿(posedge&#xff0…

简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析

问题背景: 前端需要发送一个这样的请求,但出现404 首先解析请求的变化: http://www.51xuecheng.cn/api/checkcode/pic 1.请求先打在nginx,www.51xuecheng.cn/api/checkcode/pic部分匹配到了之后会转发给网关进行处理变成localho…

软件测试之BUG篇(定义,创建,等级,生命周期)

目录 1. BUG 的定义 2. 如何创建 BUG 3. BUG 等级 4. BUG 生命周期 高频面试题: 1. BUG 的定义 当且仅当产品规格书存在且正确时,程序的实现和规格书的要求不匹配时,那就是软件错误。当产品规格说明书没有提到的功能时,以用户…

如何使用drawio画流程图以及导入导出

画一个基本的流程图 你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器,让我们以一个最基本的流程图开始。 流程图,就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 创…

如何看待2023年大量劝入C++?

如何看待2023年大量劝入C? 这一段陆陆续续很多人关注这个话题,想提醒大家,c真的很看重领域行业经验,在这里,c只是个工具,相反是这个行业的知识更重要, 最近很多小伙伴找我,说想要一…

制作一个简单的C语言词法分析程序

1.分析组成 C语言的程序中,有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表,给出对应的识别码,然后跟据对应的表格来写出程序 2.程序设计 程序主要有循环判断构成。不需推理即可产生的符号我…

【机器学习可解释性】4.SHAP 值

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.部分依赖图4.SHAP 值5.SHAP值的高级使用 正文 理解各自特征的预测结果? 介绍 您已经看到(并使用)了从机器学习模型中提取一般解释技术。但是,如果你想要打破模型对单个预测的工作原理? SHAP 值…

大促期间如何应对低价链接

一年一度的大促双十一即将来临,品牌商、经销商在忙着出货,消费者也在积极比价,大促最直观的感觉就是价格,没有低价的大促是没有意义的,所以品牌要管的不是低价产品,而是在不受规则下的低价行为。 力维网络有…

maven:编译出现Process terminated解决方法(超全)

maven:编译出现Process terminated解决方法(超全) 一. 情况一:配置文件 settings. xml 出错(解决方法1)1.1 项目编译报错如下:1.2 点击【项目名】提示找到出错文件1.3 点击查看出错文件1.4 原因及解决办法 …

Matlab论文插图绘制模板第123期—水平正负柱状图

在之前的文章中,分享了很多Matlab柱状图的绘制模板: 进一步,再来看一种特殊的柱状图:水平正负柱状图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下…

省钱兄短剧短视频视频滑动播放模块源码支持微信小程序h5安卓IOS

# 开源说明 开源省钱兄短剧系统的播放视频模块(写了测试弄了好久才弄出来、最核心的模块、已经实战了),使用uniapp技术,提供学习使用,支持IOSAndroidH5微信小程序,使用Hbuilder导入即可运行 #注意&#xff…

[红蓝攻防]MDOG(全新UI重制版)为Xss跨站而生,数据共享,表单劫持,URL重定向

项目:https://github.com/MartinxMax/MDOG 说明 功能Cookie窃取表单劫持(钓鱼账密)重定向流量劫持多平台数据推送钉钉数据推送 运行窗口 ./dist目录下已生成exe文件,双击打开 Cookie窃取 点击运行服务,复制以上的payload,payload怎么变形那么你可已去混淆 payload在页面执…

chatgpt论文润色 降重

用chatgpt最好要给他范例。chatgpt降重原理: https://www.bilibili.com/video/BV1Eh411M7Ug/?spm_id_from333.337.search-card.all.click&vd_sourceebc47f36e62b223817b8e0edff181613 一. 中文论文翻译成英文 广义零样本学习是我的研究方向,下面…

网络爬虫适合什么代理IP?如何使用?

在互联网时代之下,大数据对各行各业的发展有着重要的推动作用,而说到数据采集,必不可少的就是去使用爬虫工作。 一、什么是网络爬虫? 它是一种按照一定的规则自动游览、检索网页信息的程序或者脚本,通过自动请求目标…

路由器如何设置IP地址

IP地址是计算机网络中的关键元素,用于标识和定位设备和主机。在家庭或办公室网络中,路由器起到了连接内部设备和外部互联网的关键作用。为了使网络正常运行,需要正确设置路由器的IP地址。本文将介绍如何设置路由器的IP地址,以确保…

C++设计模式_19_Memento 备忘录(理解,目前多使用序列化方案来实现)

Memento 备忘录模式也属于“状态变化”模式,它是一个小模式,在今天来看有些过时,当今已经很少使用当前模式实现需求,思想却不变(信息隐藏),目前多使用序列化方案来实现。本系列所介绍的模式&…