当前位置: 首页 > news >正文

Qt应用开发(基础篇)——消息对话框 QMessageBox

一、前言

        QMessageBox类继承于QDialog,是一个模式对话框,常用于通知用户或向用户提出问题并接收答案。

        对话框QDialog

        QMessageBox消息框主要由四部分组成,一个主要文本text,用于提醒用户注意某种情况;一个信息文本informativeText,用于进一步解释警报或向用户询问问题;一个可选的详细文本detailedText,用于在用户请求时提供更多数据,还有就是用于接受用户响应的图标和标准按钮。

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

     QMessageBox提供一些静态的API(information(), question(), warning(), critical())可以直接打开对话框,根据API自带不同的状态图标,方便我们简单快速的使用,但是提供参数比较少,只有标题、主要文本和按钮,没有实例化的灵活。

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类

1、text

        该属性表示对话框显示的主要文本,文本可以是纯文本或者富文本,默认为空字符串。

        部件会自动检测文本类型,文本类型默认Qt::AutoText,也可以通过setTextFormat设置。

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

2、detailedText

        该属性表示对话框显示的详细文本,文本为纯文本格式,默认为空字符串。

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

3、informativeText

        该属性表示对话框显示的信息文本,一般用来做主要文本的扩展,在MAC系统中会以更小的字体显示在主要文本下面,其他系统字体大小和主要文本相同,文本为纯文本格式,默认为空字符串。

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

4、icon

        该属性表示对话框显示的系统默认图标,图标默认为空。也可以通过setIconPixmap设置自定义图标。

QMessageBox::Icon icon() const
void setIcon(QMessageBox::Icon)

 5、iconPixmap

        该属性表示当前显示的像素图标,可以通过setIconPixmap自定义需要显示的像素图标。

        一般像素图标不一定会适用于全部的系统,所以如果在跨平台的时候,需要为每个平台绘制适合的图标。

QPixmap iconPixmap() const
void setIconPixmap(const QPixmap &pixmap)

6、standardButtons

        该属性表示需要显示的标准按钮的集合。

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

        比如你可以这么做

setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
QMessageBox::StandardButton描述
QMessageBox::Ok带AcceptRole角色属性的“Ok”按钮
QMessageBox::Open带AcceptRole角色属性的“Open”按钮
QMessageBox::Save带AcceptRole角色属性的“Save”按钮
QMessageBox::Cancel带RejectRole角色属性的“Cancel”按钮
QMessageBox::Close带RejectRole角色属性的“Close”按钮
QMessageBox::Discard带DestructiveRole角色属性的基于平台的“Discard”或者“Don't Save”按钮。
QMessageBox::Apply带AcceptRole角色属性的“Apply”按钮
QMessageBox::Reset带ResetRole角色属性的“Reset”按钮
QMessageBox::RestoreDefaults带ResetRole角色属性的“Restore Defaults”按钮
QMessageBox::Help带HelpRole角色属性的“Help”按钮
QMessageBox::SaveAll带AcceptRole角色属性的“Save All”按钮
QMessageBox::Yes带YesRole角色属性的“Yes”按钮
QMessageBox::YesToAll带YesRole角色属性的“Yes to All”按钮
QMessageBox::No带NoRole角色属性的“No”按钮
QMessageBox::NoToAll带NoRole角色属性的“No to All”按钮
QMessageBox::Abort带RehectRole角色属性的“Abort”按钮
QMessageBox::Retry带AcceptRole角色属性的“Retry”按钮
QMessageBox::Ignore带AcceptRole角色属性的“Ignore”按钮
QMessageBox::NoButton无效按钮

7、textFormat

        该属性表示显示的主要文本格式,默认为Qt::AutoText。

Qt::TextFormat textFormat() const
void setTextFormat(Qt::TextFormat format)

8、textInteractionFlags

        该属性表示对话框的标签文本应该如何和用户交互。

Qt::TextInteractionFlags textInteractionFlags() const
void setTextInteractionFlags(Qt::TextInteractionFlags flags)
Qt::TextInteractionFlag描述
Qt::NoTextInteraction不能与文本交互
Qt::TextSelectableByMouse可以用鼠标选择文本,并使用上下文菜单或标准键盘快捷键将文本复制到剪贴板。
Qt::TextSelectableByKeyboard可以用键盘上的光标键选择文本。显示一个文本光标。
Qt::LinksAccessibleByMouse链接可以用鼠标突出显示和激活。
Qt::LinksAccessibleByKeyboard链接可以使用tab键聚焦,并使用enter键激活。
Qt::TextEditable文本是完全可编辑的。
Qt::TextEditorInteractionTextSelectableByMouse | TextSelectableByKeyboard | TextEditable
Qt::TextBrowserInteractionTextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard

9、公共函数

1)addButton

        添加标准按钮,并添加按钮的角色。

void addButton(QAbstractButton *button, QMessageBox::ButtonRole role)
QPushButton *addButton(const QString &text, QMessageBox::ButtonRole role)
QPushButton *addButton(QMessageBox::StandardButton button)

        如果觉得标准按钮不够灵活,使用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
}

2)button

        返回标准按钮的指针。

QAbstractButton *button(QMessageBox::StandardButton which) const

3)buttons

        返回按钮的集合。

QList<QAbstractButton *> buttons() const

4)buttonRole

        返回按钮的的角色。

QMessageBox::ButtonRole buttonRole(QAbstractButton *button) const

5)removeButton

        移除按钮。

void removeButton(QAbstractButton *button)

6)checkBox

        返回复选框指针。

QCheckBox *checkBox() const

7)setCheckBox

        添加复选框,添加后对话框获得复选框所有权。如果cb设置为空指针,表示删除复选框。

void setCheckBox(QCheckBox *cb)

8)clickedButton

        返回用户按下的按钮指针,可以通过此获取哪个自定义按钮被按下。

QAbstractButton *clickedButton() const

9)defaultButton

         返回默认按钮的指针。

QPushButton *defaultButton() const

10)setDefaultButton

         设置默认按钮,当用户按下Enter的时候触发该按钮。如果未指定默认按钮,QMessageBox将根据消息框中使用的按钮的按钮角色尝试查找一个。

void setDefaultButton(QPushButton *button)
void setDefaultButton(QMessageBox::StandardButton button)

11)buttonRole

        返回按钮角色。

QMessageBox::ButtonRole buttonRole(QAbstractButton *button) const
QMessageBox::ButtonRole描述
QMessageBox::InvalidRole无效按钮
QMessageBox::AcceptRole表示接受Accept,比如ok
QMessageBox::RejectRole表示拒绝Reject,比如Cancel
QMessageBox::DestructiveRole表示丢弃并关闭对话框
QMessageBox::ActionRole表示按下按钮对话框元素会被修改
QMessageBox::HelpRole表示帮助
QMessageBox::YesRoleYES
QMessageBox::NoRoleNo
QMessageBox::ApplyRole表示接收当前改变
QMessageBox::ResetRole表示重置当前改变

12)escapeButton

        返回设置退出按钮指针。

QAbstractButton *escapeButton() const

13)setEscapeButton

        设置退出按钮,指定之后按下ESC键会触发此按钮。

        如果没有指定转义按钮,QMessageBox将尝试使用以下规则找到一个转义按钮:

  • 如果只有一个按钮,则为按Esc时激活的按钮。
  • 如果有“取消”按钮,则是按Esc时激活的按钮。
  • 如果只有一个按钮具有Reject角色或No角色,则它是按Esc时激活的按钮。

        当无法使用这些规则确定退出按钮时,按Esc无效。

void setEscapeButton(QAbstractButton *button)
void setEscapeButton(QMessageBox::StandardButton button)

14)open

        打开对话框并将其finished()或buttonClicked()信号连接到接收器和成员指定的插槽。如果槽函数的第一个参数有一个指针,则连接到buttonClicked(),否则连接到finished(),当对话框关闭的时候,这个信号槽连接会被断开。

void open(QObject *receiver, const char *member)

        实例:打开对话框的同时绑定信号finished与槽函数onMessageBoxFinish,对话框关闭打印信息。

public slots:void onMessageBoxFinish();
void MainWindow::onMessageBoxFinish()
{qDebug()<<"QMessageBox Finish";
}
QMessageBox msgBox;
msgBox.setWindowTitle("QMessageBox");
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setDetailedText("The document may have been modified externally");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
msgBox.open(this,SLOT(onMessageBoxFinish()));
int ret = msgBox.exec();

15)exec

        重写的exec,一样是模式对话框打开,如果存在标准按钮,返回值表示按下的标准按钮的StandardButton值,如果是自定的按钮,那么这个值不确定,需要根据clickbutton()来确定按下了哪个按钮。

        注意:从QDialog继承来的result()也是返回StandardButton值,而不是QDialog::DialogCode

virtual int exec() override

10、静态函数

        在指定的父小部件前面打开具有给定标题和文本的关键消息模态对话框。

QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)
QMessageBox::StandardButton information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)
QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton)
QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)

        显示一个简单的关于框,其中包含标题和文本。

void about(QWidget *parent, const QString &title, const QString &text)

        显示一个关于Qt的简单消息框,该消息包括应用程序正在使用的Qt版本号,一般用于程序中的help菜单。

void aboutQt(QWidget *parent, const QString &title = QString())

11、信号

        每当在QMessageBox中单击按钮时,就会发出此信号。

void buttonClicked(QAbstractButton *button)

相关文章:

Qt应用开发(基础篇)——消息对话框 QMessageBox

一、前言 QMessageBox类继承于QDialog&#xff0c;是一个模式对话框&#xff0c;常用于通知用户或向用户提出问题并接收答案。 对话框QDialog QMessageBox消息框主要由四部分组成&#xff0c;一个主要文本text&#xff0c;用于提醒用户注意某种情况;一个信息文本informativeTex…...

ETC reset

ETC重新激活 换前挡风玻璃膜会把ETC设备拿下来&#xff0c;需要到【ETC服务中心】重新【粘上去】&#xff0c;另外需要工作人员用手持终端【重新激活】 ETC 背面有个 【白色】开关小柱子&#xff0c;一旦拆下来就失效&#xff0c;因为这个开关弹出来了 截面图看就是这样的&…...

2023年8月30日-[SWPUCTF 2021 新生赛]jicao

<?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;} ?> 包含了flag.php文件&#xff0c;设定了一个POST请求的id和…...

MariaDB数据库服务器

目录 一、什么是数据库&#xff1f; 二、什么是关系型数据库&#xff1f; 三、数据库字符集和排序规则是什么&#xff1f; 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库&#xff1f; 数据库&#xff08;DB&#xff09;是以一定方式长期存储在计算机硬盘内…...

Nat. Mach. Intell 2023 | DrugBAN+:域自适应的可解释双线性插值网络改进药物-靶标预测(DTI)

DrugBAN&#xff1a;Interpretable bilinear attention network with domain adaptation improves drug–target prediction 论文&#xff1a;Interpretable bilinear attention network with domain adaptation improves drug–target prediction | Nature Machine Intellige…...

org.springframework.web.reactive.function.server.ServerResponse设置响应头

记录一下 String host serverRequest.uri().getHost();Consumer<HttpHeaders> headersConsumer consumer -> {consumer.setAccessControlAllowOrigin(host);consumer.setAccessControlAllowCredentials(true);consumer.set("Access-Control-Allow-Headers"…...

高频面试题:如何分别用三种姿势实现三个线程交替打印0到100

最近面试遇到的一道题&#xff0c;需要三个线程交替打印0-100&#xff0c;当时对多线程并不是很熟悉因此没怎么写出来&#xff0c;网上搜了之后得到现 synchronized wait/notifyAll 实现思路&#xff1a;判断当前打印数字和线程数的取余&#xff0c;不等于当前线程则处于等待…...

【git】Idea撤回本地分支、或远程分支提交记录的各种实际场景操作步骤

文章目录 idea撤回本地分支、远程分支场景操作集合场景1&#xff1a;要撤回最后一次本地分支的提交实现效果&#xff1a;操作步骤&#xff1a; 场景2&#xff1a;要撤回最后一次远程分支的提交有撤销记录的&#xff1a;实现效果&#xff1a;操作步骤&#xff1a; 无撤销记录的&…...

FPGA SPI 驱动程序

1.引言 此驱动程序已经完成很久了&#xff0c;花了2个星期的时间&#xff0c;主要是提升程序运行的效率。最近整理文件的时候又看到了&#xff0c;记录一下。 2.程序框架分解 module adc7254_Ctrl(input sys_clk, //system clkc 50Minput re…...

【实战】十一、看板页面及任务组页面开发(五) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十七)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

mac m1 docker 安装kafka和zookeeper

获取本地ip地址 ifconfig en0 192.168.0.105. 下面的ip都会使用到 1、拉取镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 2、启动容器 启动 zookeeper docker run -d --name zookeeper -p 2181:2181 映射 3、 启动 kafka 注意&#xff…...

宏观经济和风电预测误差分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

GO学习之 搜索引擎(ElasticSearch)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...

Sentinel —实时监控

Sentinel 提供对所有资源的实时监控。如果需要实时监控&#xff0c;客户端需引入以下依赖&#xff08;以 Maven 为例&#xff09;&#xff1a; <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artif…...

接口优化通用方案

目录 批量异步、回调缓存预取池化并行锁粒度索引大事务海量数据 批量 批量思想&#xff1a;批量操作数据库 优化前&#xff1a; //for循环单笔入库 for(TransDetail detail:transDetailList){ insert(detail); } 优化后&#xff1a; batchInsert(transDetailList); 异步、回…...

用Visual Studio 2022的.map文件来查看C++变量在内存中的布局情况

先看几个实例 代码1 #include <iostream> int data_arr[32768]; int main() {data_arr[1] 11;std::cout<<"data_arr[1]: " << data_arr[1] << std::endl;return data_arr[1]; } 上述代码在Win10 X64&#xff0c;MSVC Release模式下编译&…...

使用代理突破浏览器IP限制

一、实验目的: 主要时了解代理服务器的概念&#xff0c;同时如何突破浏览器IP限制 二、预备知识&#xff1a; 代理服务器英文全称是Proxy Server&#xff0c;其功能就是代理网络用户去取得网络信息。形象的说&#xff1a;它是网络信息的中转站&#xff0c;特别是它具有一个cac…...

HuggingFace中的 Files and versions 如何优雅下载到本地?(Python requests,tqdm)

前言 在使用huggingface把玩各种大模型时&#xff0c;如果选择从远程加载模型&#xff0c;这个过程可能因为网络问题而非常耗时甚至直接失败&#xff0c;所以把模型、分词器等相关文件下载到本地&#xff0c;再直接从本地加载就成了不可回避的流程。 在进入具体版本的模型后&…...

三、原型模式

一、什么是原型模式 原型&#xff08;Prototype&#xff09;模式的定义如下&#xff1a;用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里&#xff0c;原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效&a…...

transformer实现词性标注

1、self-attention 1.1、self-attention结构图 上图是 Self-Attention 的结构&#xff0c;在计算的时候需要用到矩阵 Q(查询), K(键值), V(值)。在实际中&#xff0c;Self-Attention 接收的是输入(单词的表示向量 x组成的矩阵 X) 或者上一个 Encoder block 的输出。而 Q, K, V…...

Java中异或操作和OTP算法

最近在研究加密算法&#xff0c;发现异或操作在加密算法中用途特别广&#xff0c;也特别好用。下面以Java语言为例&#xff0c;简单记录一下异或操作&#xff0c;以及在算法中的使用&#xff0c;包括常用的OTP算法。 一&#xff0c;异或操作特征 1&#xff0c; 相同出0&#…...

K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下)

温故知新 &#x1f4da;第三章 Kubernetes各组件部署&#x1f4d7;安装kubectl&#xff08;可直接跳转到安装kubeadm章节&#xff0c;直接全部安装了&#xff09;&#x1f4d5;下载kubectl安装包&#x1f4d5;执行kubectl安装&#x1f4d5;验证kubectl &#x1f4d7;安装kubead…...

女子垒球运动的发展·垒球1号位

女子垒球运动的发展 1. 女子垒球运动的起源和发展概述 女子垒球运动&#xff0c;诞生于19世纪末的美国&#xff0c;作为棒球运动的衍生品&#xff0c;经过百年的积淀&#xff0c;已在全球范围内广泛传播&#xff0c;形成了丰富的赛事文化。她的起源&#xff0c;可以追溯到19世…...

Debian 30 周年,生日快乐!

导读近日是 Debian 日&#xff0c;也是由伊恩-默多克&#xff08;Ian Murdock&#xff09;创立的 Debian GNU/Linux 通用操作系统和社区支持的 Debian 项目 30 周年纪念日。 不管你信不信&#xff0c;从已故的伊恩-默多克于 1993 年 8 月 16 日宣布成立 Debian 项目&#xff0c…...

字符串匹配的Rabin–Karp算法

leetcode-28 实现strStr() 更熟悉的字符串匹配算法可能是KMP算法, 但在Golang中,使用的是Rabin–Karp算法 一般中文译作 拉宾-卡普算法,由迈克尔拉宾与理查德卡普于1987年提出 “ 要在一段文本中找出单个模式串的一个匹配&#xff0c;此算法具有线性时间的平均复杂度&#xff0…...

傅里叶变换(FFT)笔记存档

参考博客&#xff1a;https://www.luogu.com.cn/blog/command-block/fft-xue-xi-bi-ji 目录&#xff1a; FFT引入复数相关知识单位根及其相关性质DFT过程&#xff08;难点&#xff09;DFT结论&#xff08;重要&#xff09;IDFT结论&#xff08;重要&#xff09;IDFT结论证明&…...

ELK安装、部署、调试 (二) ES的安装部署

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口操作ES&#xff0c;也可以利用Java API。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业…...

Android 13 - Media框架(8)- MediaExtractor

上一篇我们了解了 GenericSource 需要依赖 IMediaExtractor 完成 demux 工作&#xff0c;这一篇我们就来学习 android media 框架中的第二个服务 media.extractor&#xff0c;看看 IMediaExtractor 是如何创建与工作的。 1、MediaExtractorService media.extractor 和 media.p…...

Flutter 混合开发调试

针对Flutter开发的同学来说&#xff0c;大部分的应用还是Native Flutter的混合开发&#xff0c;所以每次改完Flutter代码&#xff0c;运行整个项目无疑是很费时间的。所以Flutter官方也给我们提供了混合调试的方案【在混合开发模式下进行调试】&#xff0c;这里以Android Stud…...

C语言每日一练------(Day3)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今天练习题的关键字&#xff1a; 尼科彻斯定理 等差数列 &#x1f493;博主csdn个人主页&#xff1a…...