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

关于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_labelqt_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&#xff1a;使用QMessageBox弹出标准对话框 QMessageBox模态与非模态及QT中的exec() 如何调整QMessageBox的大小 QSS 自定义QMessageBox python QMessageBox设置标签和按钮居中、中文按钮 使用建议 经过查看多方的资料&…...

C语言预处理详解

1.预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C&#…...

大语言模型画图(流程图、框架图)

第一步&#xff1a;向随意大语言模型&#xff0c;描述内容&#xff0c;推荐豆包 豆包 加上下面Prompt 通过Mermaid语法&#xff0c;描述上面流程图 第二步&#xff1a;将生成Mermaid输入流程图生成网站 中文Mermaid - 流程图、关系图在线画图、生成和编辑器...

2024年API接口发展趋势:智能化、自动化引领潮流

随着信息技术的飞速发展&#xff0c;应用程序编程接口&#xff08;API&#xff09;已成为现代软件开发的核心组成部分。API作为不同系统之间的桥梁&#xff0c;使得数据、功能和服务能够在各种平台和设备之间无缝流动。在2024年&#xff0c;API接口正经历着一系列显著的变革和发…...

数据挖掘与机器学习DMML(part 8)K近邻(KNN)

K Nearest Neighbours KNN Definition KNN 是一种简单的算法&#xff0c;它存储所有可用案例&#xff0c;并根据相似度量对新案例进行分类。 KNN 不同名称&#xff1a; K-Nearest Neighbors • Memory-Based Reasoning基于记忆的推理 • Example-Based Reasoning基于实例的…...

Fortify 24.2.0版本最新版 win/mac/linux

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

突破时间与空间限制的富媒体百宝箱——智能工具箱:让云上内容生产更easy

“这是你的同款日常吗&#xff1f;老是在赶deadline&#xff0c;苦练PS还未出师&#xff0c;premiere、达芬奇真的好难&#xff0c;学python脑容量确实不够~打工人太难了~~” 来试试智能工具箱吧&#xff01;即来即用&#xff0c;一键实现办公自由。图片工具、视频工具、音频工…...

MacOs使用Wine 安装UaExpert与UaExpert的使用

要在 macOS 上使用 Wine 安装和运行 UaExpert&#xff0c;可以按照以下步骤操作&#xff1a; 安装 Wine 在 macOS 上&#xff0c;你可以通过 Homebrew 来安装 Wine。如果你还没有安装 Homebrew&#xff0c;可以先安装 Homebrew&#xff0c;然后使用它来安装 Wine。 bash /bin…...

【Prompt Engineering】3.文本概括

一、引言 文本信息量大&#xff0c;LLM在文本概括任务上展现出强大能力。本章介绍如何通过编程方式调用API接口实现文本概括功能。 首先&#xff0c;我们需要引入 zhipuAI 包&#xff0c;加载 API 密钥&#xff0c;定义 getCompletion 函数。 from zhipuai import ZhipuAIke…...

力扣-图论-14【算法学习day.64】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

redis 架构详解

Redis架构详解可以从以下几个方面进行阐述&#xff1a; 一、部署架构 Redis有多种部署架构&#xff0c;适用于不同的应用场景和需求&#xff0c;主要包括以下几种&#xff1a; 单机模式&#xff08;Standalone Mode&#xff09; 特点&#xff1a;部署简单&#xff0c;配置方便…...

多分类交叉熵与稀疏分类交叉熵

总结: 标签为 One-hot 编码的多分类问题,用分类交叉熵对于标签为整数的多分类问题,用稀疏分类交叉熵稀疏分类交叉熵内部会将整数标签转换为 One-hot 编码,而如果标签已经是 One-hot 编码的形式,再使用稀疏分类交叉熵就会多此一举。 算例 假设我们有三个类别:A、B 和 C。…...

PHP 8新特性深度解析与实战应用

引言 PHP作为一种广泛使用的开源脚本语言&#xff0c;以其在Web开发领域的卓越性能而闻名。随着PHP 8的发布&#xff0c;这门语言再次迎来了许多令人兴奋的新特性和改进。本文将深入探讨PHP 8的新特性&#xff0c;并提供实战应用示例&#xff0c;帮助开发者更好地理解和使用PH…...

【C语言】UDP通信

udp使用的是数据报传输。可以一对一&#xff0c;一对多进行传输&#xff0c;用于快速&#xff0c;实时性高的场景 服务器端&#xff1a; 使用步骤&#xff1a; 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.思路&#xff1a; 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.处理边界&#xff1a; a.只向右移动&#xff0c;至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …...

Y3编辑器教程5:触发器进阶使用(镜头、UI、表格、函数库、排行榜、游戏不同步)

文章目录 一、游戏声音设计二、 游戏镜头设计2.1 镜头的基本参数2.2 镜头时间轴动画 三、界面编辑3.1 界面编辑器设置3.2 添加按钮事件3.3 触发编写 四、 表格编辑器&#xff08;实现对话UI&#xff09;4.1 一维表和多维表4.2 数据验证、搜索、保存与撤销4.3 Excel导入导出4.4 …...

基于小程序实现地图定位、轨迹绘制、地图标点、快捷导航、唤醒导航APP、开箱即用

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

JAVA后端实现全国区县下拉选择--树形结构

设计图如图&#xff1a; 直接上代码 数据库中的格式&#xff1a; JAVA实体类&#xff1a; Data public class SysAreaZoningDO {private Long districtId;private Long parentId;private String districtName;private List<SysAreaZoningDO> children; } MapperSQL语句…...

数据结构速成

1. 数据结构与算法 2. 顺序表 3. 链表 4. 栈与队列 5. 串 6. 树与二叉树&#xff08;1&#xff09; 7. 树与二叉树&#xff08;2&#xff09; 8. 图 9. 图的应用 10. 查找 11. 排序&#xff08;1&#xff09; 12. 排序&#xff08;2&#xff09;...

STM32开发环境搭建:Keil5 MDK安装与驱动配置全指南

1. Keil5 MDK安装前的准备工作 第一次接触STM32开发的朋友&#xff0c;往往会在环境搭建这一步卡住。我刚开始玩STM32的时候&#xff0c;光是安装Keil就折腾了大半天。现在回想起来&#xff0c;其实只要提前做好这几项准备&#xff0c;整个过程会顺利很多。 首先说说硬件准备。…...

多功能 PEG 衍生物 Ergosterol-PEG-MAL,Ergosterol-PEG-Maleimide详解

试剂基本信息中文名称&#xff1a;麦角固醇-聚乙二醇-马来酰亚胺英文名称&#xff1a;Ergosterol-PEG-MAL&#xff0c;Ergosterol-PEG-Maleimide分子量&#xff1a;0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c…...

001、性能优化基础:慢SQL诊断与执行计划分析

昨天凌晨又被告警短信吵醒了&#xff0c;线上某核心接口的P99响应时间飙到了3秒。登录服务器一看&#xff0c;MySQL的CPU已经跑满&#xff0c;processlist里堆了二十几个相同的查询——又是慢SQL惹的祸。这种场景咱们做后端开发的太熟悉了&#xff0c;今天就来聊聊怎么系统性地…...

突破QQ音乐格式限制:QMCFLAC2MP3的音乐自由解决方案

突破QQ音乐格式限制&#xff1a;QMCFLAC2MP3的音乐自由解决方案 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件&#xff0c;突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 QMCFLAC2MP3是一款专为破解QQ音乐格式限制设计…...

ESP32-S3摄像头实战:按键触发拍照与SD卡自动存储方案

1. ESP32-S3摄像头项目核心价值与应用场景 当你手头有一块ESP32-S3开发板和摄像头模块时&#xff0c;最直接的冲动可能就是做个能拍照的小设备。但要把这个想法落地&#xff0c;需要解决三个关键问题&#xff1a;如何稳定触发拍摄&#xff1f;拍完的照片存哪里&#xff1f;怎么…...

Wan2.2-I2V-A14B数据预处理流水线:使用OpenCV自动化处理输入图像

Wan2.2-I2V-A14B数据预处理流水线&#xff1a;使用OpenCV自动化处理输入图像 1. 为什么需要图像预处理 在图像生成视频&#xff08;I2V&#xff09;的流程中&#xff0c;输入图像的质量直接影响最终视频的生成效果。就像做菜前需要洗净切好食材一样&#xff0c;对原始图像进行…...

2025平航杯电子取证实战:从木马溯源到服务器渗透的完整链条分析

1. 木马溯源&#xff1a;从可疑流量到攻击者定位 2025年4月&#xff0c;杭州滨江警方接到一起特殊报案。市民刘晓倩&#xff08;化名倩倩&#xff09;发现自己的手机出现异常发热、电量消耗过快等现象&#xff0c;怀疑设备被人监控。这个看似普通的个人隐私案件&#xff0c;最终…...

Ostrakon-VL扫描终端真实案例:烘焙坊用AI识别原料保质期与库存预警

Ostrakon-VL扫描终端真实案例&#xff1a;烘焙坊用AI识别原料保质期与库存预警 1. 项目背景与痛点 在烘焙行业&#xff0c;原料管理一直是个令人头疼的问题。传统的手工记录方式存在以下典型问题&#xff1a; 保质期难追踪&#xff1a;面粉、奶油等原料包装上的日期标识五花…...

企业微信自动化新解:PC端HOOK与iPad协议双轨实践

1. 企业微信自动化的业务痛点与双轨方案 最近两年服务企业客户时&#xff0c;最常被问到的就是&#xff1a;"每天要手动处理上千条客户消息&#xff0c;有没有更高效的解决方案&#xff1f;" 这让我意识到企业微信自动化已成为刚需。传统人工操作在批量消息发送、大规…...

OpenClaw自动化测试:Qwen3.5-9B-AWQ-4bit驱动UI截图比对

OpenClaw自动化测试&#xff1a;Qwen3.5-9B-AWQ-4bit驱动UI截图比对 1. 为什么需要自动化UI测试 作为个人开发者&#xff0c;每次前端代码修改后最头疼的就是手动检查各个页面的UI变化。传统做法要么是人工逐页比对&#xff0c;要么依赖复杂的测试框架配置。直到我发现OpenCl…...