关于QMessageBox的一些使用总结和避坑指南
参考学习
Qt中QMessageBox的用法—看这一篇就够了
Qt:使用QMessageBox弹出标准对话框
QMessageBox模态与非模态及QT中的exec()
如何调整QMessageBox的大小
QSS 自定义QMessageBox
python QMessageBox设置标签和按钮居中、中文按钮
使用建议
经过查看多方的资料,并结合个人的使用与配置,个人觉得把QMessageBox
的每个child
当做独立的子部件
进行设置和处理是比较好的方式
可以通过findChildren
函数来获取和查看QMessageBox
当前的子部件
#include <QApplication>
#include <QMessageBox>
#include <QLabel>
#include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建 QMessageBoxQMessageBox msgBox;msgBox.setText("This is the main text."); // 主文本msgBox.setInformativeText("This is the informative text."); // 附加文本msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);msgBox.setDefaultButton(QMessageBox::Ok);// 列出所有子部件及其对象名QList<QWidget *> children = msgBox.findChildren<QWidget *>();for (QWidget *child : children) {qDebug() << "Class:" << child->metaObject()->className()<< "Object Name:" << child->objectName();}msgBox.exec();return app.exec();
}
输出如下
Class: QLabel Object Name: "qt_msgboxex_icon_label"
Class: QLabel Object Name: "qt_msgbox_label"
Class: QDialogButtonBox Object Name: "qt_msgbox_buttonbox"
Class: QPushButton Object Name: ""
Class: QLabel Object Name: "qt_msgbox_informativelabel"
获取并操作子部件
可以先用findChild
函数获取QMessageBox
的子部件,然后再按子对象的类型操作即可,这在设置子部件的格式时是比较方便的,示意代码如下
void MainWindow::initMessageBox()
{m_messageBox = new QMessageBox();m_messageBox->setIcon(QMessageBox::Icon::Critical);m_messageBox->setModal(false);m_messageBox->setStandardButtons(QMessageBox::Ok);m_messageBox->setWindowTitle("Device Connect");QLabel* mainLabel = m_messageBox->findChild<QLabel*>("qt_msgbox_label");if (mainLabel != nullptr) {mainLabel->setAlignment(Qt::AlignCenter);mainLabel->setText("The device connection is abnormal");mainLabel->setStyleSheet("font-size:20px; color:red");mainLabel->setFixedWidth(500);}QDialogButtonBox* buttonBox = m_messageBox->findChild<QDialogButtonBox*>("qt_msgbox_buttonbox");if (buttonBox != nullptr) {buttonBox->setStandardButtons(QDialogButtonBox::Ok);buttonBox->setCenterButtons(true);buttonBox->setStyleSheet("font-size:16px;");}
}
一些坑
避免设置全局的样式
m_messageBox.setStyleSheet("QLabel{min-width:500 px; font-size: 24px;} QPushButton{ width:250px; font-size: 18px; }");
上面的这种方式,对QLabel
样式的设计是作用到有所Label
的,即qt_msgboxex_icon_label
、qt_msgbox_label
等,这样可能导致不是想要的效果
需要先设置Label的内容才可以获取到该Label
这个问题比较隐蔽,实际开发中发现,如果不设置Label
内容的话,用findChild
函数可能是获取不到该Label
,因此操作前最好进行一下非空的判断
QLabel* mainLabel = m_messageBox->findChild<QLabel*>("qt_msgbox_label");if (mainLabel != nullptr) {// 操作mainLabel}
QMessageBox的模态与非模态
模态对话框
默认创建的QMessageBox
都是模态的,用静态方法
创建的QMessageBox
也是模态的
QMessageBox::warning(this, tr("提示"), text, tr("是"),tr("否"));
非模态对话框
要创建一个非模态(消息)对话框,只能创建一个新的QMessageBox
对象
然后调用setModal方法设置为非模态
QMessageBox* msgBox = new QMessageBox(QMessageBox::Warning,"警告",warnMsg);//参数 Icon icon, const QString &title, const QString &text,
msgBox->setModal(false);//设置为非模态
msgBox->setAttribute(Qt::WA_DeleteOnClose); //关掉消息框后删除指针
msgBox->show();
// msgBox->exec();//使用exec()默认是模态的
也可以用msgBox->open();
方法显示QMessageBox
对话框
如果使用msgBox->exec();
程序运行后显示的对话框是模态
的
关于exec()
- **
QMessageBox::exec()
**是重写了QDialog::exec()
。调用这个方法会显示模态
消息对话框,直到用户关闭了这个对话框 - 使用带有
标准按钮
的QMessageBox
时,函数返回一个StandardButton
值,指示单击的标准按钮 - 当使用带有
自定义按钮
的QMessageBox
时,此函数返回一个不透明值;使用clickedButton()
确定单击了哪个按钮
QPushButton* btn = msgBox->addButton("查看",QMessageBox::AcceptRole);//添加按钮到消息对话框
if(msgBox->clickedButton()==btn)//如果btn这个按钮被选中
//后续操作
结语
源于工作中的一点思考,不足之处,还请指正
相关文章:
关于QMessageBox的一些使用总结和避坑指南
参考学习 Qt中QMessageBox的用法—看这一篇就够了 Qt:使用QMessageBox弹出标准对话框 QMessageBox模态与非模态及QT中的exec() 如何调整QMessageBox的大小 QSS 自定义QMessageBox python QMessageBox设置标签和按钮居中、中文按钮 使用建议 经过查看多方的资料&…...

C语言预处理详解
1.预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C&#…...
大语言模型画图(流程图、框架图)
第一步:向随意大语言模型,描述内容,推荐豆包 豆包 加上下面Prompt 通过Mermaid语法,描述上面流程图 第二步:将生成Mermaid输入流程图生成网站 中文Mermaid - 流程图、关系图在线画图、生成和编辑器...
2024年API接口发展趋势:智能化、自动化引领潮流
随着信息技术的飞速发展,应用程序编程接口(API)已成为现代软件开发的核心组成部分。API作为不同系统之间的桥梁,使得数据、功能和服务能够在各种平台和设备之间无缝流动。在2024年,API接口正经历着一系列显著的变革和发…...

数据挖掘与机器学习DMML(part 8)K近邻(KNN)
K Nearest Neighbours KNN Definition KNN 是一种简单的算法,它存储所有可用案例,并根据相似度量对新案例进行分类。 KNN 不同名称: K-Nearest Neighbors • Memory-Based Reasoning基于记忆的推理 • Example-Based Reasoning基于实例的…...

Fortify 24.2.0版本最新版 win/mac/linux
工具介绍: Fortify SCA作为一款业内主流的静态代码扫描工具,被广泛应用于白盒测试中。与其他静态代码扫描工具相比,Fortify SCA的突出优势主要在于更加广泛地支持的语言和开发平台、更全面和权威的安全规则库使扫描更加全面、更加智能化的自定…...

突破时间与空间限制的富媒体百宝箱——智能工具箱:让云上内容生产更easy
“这是你的同款日常吗?老是在赶deadline,苦练PS还未出师,premiere、达芬奇真的好难,学python脑容量确实不够~打工人太难了~~” 来试试智能工具箱吧!即来即用,一键实现办公自由。图片工具、视频工具、音频工…...
MacOs使用Wine 安装UaExpert与UaExpert的使用
要在 macOS 上使用 Wine 安装和运行 UaExpert,可以按照以下步骤操作: 安装 Wine 在 macOS 上,你可以通过 Homebrew 来安装 Wine。如果你还没有安装 Homebrew,可以先安装 Homebrew,然后使用它来安装 Wine。 bash /bin…...
【Prompt Engineering】3.文本概括
一、引言 文本信息量大,LLM在文本概括任务上展现出强大能力。本章介绍如何通过编程方式调用API接口实现文本概括功能。 首先,我们需要引入 zhipuAI 包,加载 API 密钥,定义 getCompletion 函数。 from zhipuai import ZhipuAIke…...

力扣-图论-14【算法学习day.64】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
redis 架构详解
Redis架构详解可以从以下几个方面进行阐述: 一、部署架构 Redis有多种部署架构,适用于不同的应用场景和需求,主要包括以下几种: 单机模式(Standalone Mode) 特点:部署简单,配置方便…...

多分类交叉熵与稀疏分类交叉熵
总结: 标签为 One-hot 编码的多分类问题,用分类交叉熵对于标签为整数的多分类问题,用稀疏分类交叉熵稀疏分类交叉熵内部会将整数标签转换为 One-hot 编码,而如果标签已经是 One-hot 编码的形式,再使用稀疏分类交叉熵就会多此一举。 算例 假设我们有三个类别:A、B 和 C。…...
PHP 8新特性深度解析与实战应用
引言 PHP作为一种广泛使用的开源脚本语言,以其在Web开发领域的卓越性能而闻名。随着PHP 8的发布,这门语言再次迎来了许多令人兴奋的新特性和改进。本文将深入探讨PHP 8的新特性,并提供实战应用示例,帮助开发者更好地理解和使用PH…...
【C语言】UDP通信
udp使用的是数据报传输。可以一对一,一对多进行传输,用于快速,实时性高的场景 服务器端: 使用步骤: 1.创建socket 2.bind绑定可接收的客户端 3.while{ recv接收数据 send发送数据 } #include <stdio.h> #inclu…...
用Keytool和OpenSSL生成和签发数字证书
一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书 J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密钥、证书和证书链。Keytool工具的命令在JavaSE6中已经改变,不过以前的命令仍然支持。Keytool也可以用来管理对称加密算法中…...

算法-动态数组-62.不同路径
一、题目 二、思路解析 1.思路: 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法: 无 3.核心逻辑: 1.处理边界: a.只向右移动,至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …...

Y3编辑器教程5:触发器进阶使用(镜头、UI、表格、函数库、排行榜、游戏不同步)
文章目录 一、游戏声音设计二、 游戏镜头设计2.1 镜头的基本参数2.2 镜头时间轴动画 三、界面编辑3.1 界面编辑器设置3.2 添加按钮事件3.3 触发编写 四、 表格编辑器(实现对话UI)4.1 一维表和多维表4.2 数据验证、搜索、保存与撤销4.3 Excel导入导出4.4 …...

基于小程序实现地图定位、轨迹绘制、地图标点、快捷导航、唤醒导航APP、开箱即用
目录 前言研究背景与意义研究目标与内容研究方法与技术路线小程序地图组件介绍定位技术与原理轨迹绘制技术地图标注与标记功能地图定位与轨迹绘制功能实现定位功能设计与实现获取用户当前位置总结说明代码块前言 研究背景与意义 地图定位和轨迹追踪作为智能手机中常见的功能之…...

JAVA后端实现全国区县下拉选择--树形结构
设计图如图: 直接上代码 数据库中的格式: JAVA实体类: Data public class SysAreaZoningDO {private Long districtId;private Long parentId;private String districtName;private List<SysAreaZoningDO> children; } MapperSQL语句…...

数据结构速成
1. 数据结构与算法 2. 顺序表 3. 链表 4. 栈与队列 5. 串 6. 树与二叉树(1) 7. 树与二叉树(2) 8. 图 9. 图的应用 10. 查找 11. 排序(1) 12. 排序(2)...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...