Qt --- 自定义提示框 类似QMessagebox
QMessageBox::information(NULL, QString("title"), QString("I am information"));

以下是自定义提示框的代码,有图有真相!提示框大部分都采用模态的形式,关于模态也不再多提!所以父类为QDialog,通过exec()返回值QDialog::Accepted或QDialog::Rejected来进行判断执行相应的事件。
#include "msg_box.h" MsgBox::MsgBox(QWidget *parent): QDialog(parent)
{this->resize(320, 160);//获取主界面的宽度int width = this->width();int height = this->height();//初始化为未按下鼠标左键mouse_press = false;//设置标题栏隐藏this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);close_button = new PushButton(this);close_button->loadPixmap("tipclose");close_button->setGeometry(width-30, 0, 30, 30); //设置标题title_label = new QLabel(this);title_label->setObjectName(QString::fromUtf8("labelOne"));QFont font = title_label->font();font.setBold(true);title_label->setFont(font);title_label->setGeometry(0, 0, width-50, 30);//设置提示图片msg_label = new QLabel(this);msg_label->setGeometry(20, 50, 36, 36);msg_label->setScaledContents(true);//设置提示信息,让QLabel能够自动判断并换行显示:ask_label = new QLabel(this);ask_label->setGeometry(65, 60, width-100, 25*2);ask_label->setWordWrap(true);ask_label->setAlignment(Qt::AlignTop);check_box = new QCheckBox(this);check_box->setGeometry(10, height - 35, 160, 25);check_box->setHidden(true);cancel_button = new QPushButton(this);cancel_button->resize(70, 25);cancel_button->move(width - cancel_button->width() - 10, height - 35);ok_button = new QPushButton(this);ok_button->resize(70, 25);ok_button->move(width - ok_button->width() - cancel_button->width() - 20, height - 35);check_box->setStyleSheet("background:transparent;");ok_button->setObjectName(QString::fromUtf8("pushButtonTwo"));cancel_button->setObjectName(QString::fromUtf8("pushButtonTwo"));QObject::connect(ok_button, SIGNAL(clicked()), this, SLOT(okOperate()));QObject::connect(close_button, SIGNAL(clicked()), this, SLOT(cancelOperate()));QObject::connect(cancel_button, SIGNAL(clicked()), this, SLOT(cancelOperate()));this->translateLanguage();
}void MsgBox::translateLanguage()
{close_button->setToolTip(tr("close"));check_box->setText(tr("remember"));ok_text = tr("ok");cancel_text = tr("cancel");
}void MsgBox::setInfo(QString title_info, QString info, QPixmap pixmap, bool is_check_hidden, bool is_ok_hidden)
{title_label->setText(QString(" ") + title_info);//设置提示信息ask_label->setText(info);msg_label->setPixmap(pixmap);//是否隐藏复选框check_box->setChecked(false);check_box->setHidden(is_check_hidden);//是否隐藏确定按钮ok_button->setHidden(is_ok_hidden);if(is_ok_hidden){cancel_button->setText(ok_text);}else{ok_button->setText(ok_text);cancel_button->setText(cancel_text);}//设置默认按钮为取消按钮cancel_button->setFocus();
}void MsgBox::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.drawPixmap(rect(), QPixmap(":/icon/tip"));QBitmap bitmap(this->size());QPainter painter2(&bitmap);painter2.fillRect(bitmap.rect(), Qt::white);painter2.setBrush(QColor(0, 0, 0));painter2.drawRoundedRect(rect(), 4, 4);setMask(bitmap);
}void MsgBox::mousePressEvent( QMouseEvent * event )
{//只能是鼠标左键移动和改变大小if(event->button() == Qt::LeftButton){mouse_press = true;}//窗口移动距离move_point = event->globalPos() - pos();
}void MsgBox::mouseReleaseEvent( QMouseEvent *)
{mouse_press = false;
}void MsgBox::mouseMoveEvent(QMouseEvent *event)
{//移动窗口if(mouse_press) {QPoint move_pos = event->globalPos();move(move_pos - move_point);}
}void MsgBox::okOperate()
{bool is_hidden = check_box->isHidden();if(!is_hidden){bool is_checked = check_box->isChecked();emit msgChecked(is_checked, true);}this->accept();
}void MsgBox::cancelOperate()
{bool is_check_hidden = check_box->isHidden();bool is_ok_hidden = ok_button->isHidden();if(!is_check_hidden){bool is_checked = check_box->isChecked();if(!is_ok_hidden){emit msgChecked(is_checked, false);}else{emit okMessageHidden(is_checked);} }this->reject();
}
效果图:
MsgBox *msg_box = new MsgBox();msg_box->setInfo(QString("文件删除"), QString("确实要把文件放入回收站吗?"), QPixmap(":/icon/attention"), true, false);msg_box->exec();

MsgBox *msg_box2 = new MsgBox();msg_box2->setInfo(QString("重命名"), QString("文件名不能包含下列任何字符:\n \\ / : * ? \" < > |"), QPixmap(":/icon/attention"), true, true);msg_box2->exec();

MsgBox *msg_box3 = new MsgBox();msg_box3->setInfo(QString("批量文件删除"), QString("确实要把所有文件放入回收站吗?"), QPixmap(":/icon/attention"), false, false);msg_box3->exec();

相关文章:
Qt --- 自定义提示框 类似QMessagebox
QMessageBox::information(NULL, QString("title"), QString("I am information")); 以下是自定义提示框的代码,有图有真相!提示框大部分都采用模态的形式,关于模态也不再多提!所以父类为QDialog,…...
Redis 分布式锁与 Redlock 算法实现
Redis 分布式锁与 Redlock 算法实现 一、简介1. Redis的分布式锁2. 分布式锁的实现原理 二、Redis 分布式锁使用场景1. 分布式系统中数据资源的互斥访问2. 分布式环境中多个节点之间的协作3. 常见场景及应用 三、Redlock算法的原理与实现1. Redlock算法的背景2. Redlock算法的原…...
【附安装包】Inventor2024安装教程 机械制图|三维制图
软件下载 软件:Inventor版本:2024语言:简体中文大小:5.61G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.5GHz 内存8G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu…...
c++ 判断基类指针指向的真实对象类型
在 c 面向对象使用中,我们常常会定义一个基类类型的指针,在运行过程中,这个指针可能指向一个基类类型的对象,也可能指向的是其子类类型的对象,那现在问题来了,我们如何去判断这个指针到底执行了一个什么类型…...
退出屏保前玩一把游戏吧!webBrowser中网页如何调用.NET方法
本文主要以 HackerScreenSaver 新功能的开发经历介绍 webBrowser中网页如何调用.NET方法的过程。 1. 背景 之前开源了一款名为 HackerScreenSaver 的 Windows 屏保程序。该程序具有模拟黑客炫酷界面的特点,用户可以将自定义的网页作为锁屏界面。不久前,…...
hive-列转行
转成 select customer_code,product_type from temp.temp_xx LATERAL VIEW explode(SPLIT(product_types,,)) table_tmp AS product_type where customer_code K100515182...
【网络】IP网络层和数据链路层
IP协议详解 1.概念 1.1 四层模型 应用层:解决如何传输数据(依照什么格式/协议处理数据)的问题传输层:解决可靠性问题网络层:数据往哪里传,怎么找到目标主机数据链路层(物理层)&…...
基于Spring Gateway路由判断器实现各种灰度发布场景
文章目录 1、灰度发布实现1.1 按随机用户的流量百分比实现灰度1.2 按人群划分实现的灰度1.2.1 通过Header信息实现灰度1.2.2 通过Query信息实现灰度1.2.3 通过RemoteAdd判断来源IP实现灰度 2、路由判断器2.1. After2.2. Before2.3. Between2.4. Cookie2.5. Header2.6. Host2.7.…...
mysql57、mysql80 目录结构 之 Windows
查看mysql 数据存储的位置 /bin:存储可执行文件,主要包含客户端和服务端启动程序,如mysql.exe、mysqld.exe等 /docs:存放一些文档 /include:用于放置一些头文件,如:mysql.h、mysqld_error.h 等 …...
Mac操作系统Safari 17全新升级:秋季推出全部特性
苹果的内置浏览器可能是Mac上最常用的应用程序(是的,甚至比Finder、超级Mac Geeks还要多)。因此,苹果总是为其浏览器Safari添加有用的新功能。在今年秋天与macOS Sonoma一起推出的第17版中,Safari可以帮助你提高工作效…...
UDP通信、本地套接字
#include <sys/types.h> #include <sys/socket > ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);- 参数:- sockfd : 通信的fd- buf : 要发送的数据- len : 发送数据的长度…...
ChatGPT提示与技巧分享:如何作出更好的提示2023年8月
对ChatGPT的一些酷炫技巧感兴趣吗?这里提供了一些可以帮助你充分利用ChatGPT,成为AI工具专家的技巧。 毫无疑问,ChatGPT是目前最广泛使用的人工智能工具之一。它不仅毫不留情地取代了一些特定领域常用的软件小工具(如智能对联、经典语录生…...
网络安全(自学黑客)一文全解
目录 特别声明:(文末附资料笔记工具) 一、前言 二、定义 三、分类 1.白帽黑客(White Hat Hacker) 2.黑帽黑客(Black Hat Hacker) 3.灰帽黑客(Gray Hat Hacker) 四…...
Vue中ElementUI结合transform使用时,发现弹框定位不准确问题
在近期开发中,需要将1920*1080放到更大像素大屏上演示,所以需要使用到transform来对页面进行缩放,但是此时发现弹框定位出错问题,无法准备定位到实际位置。 查看element-ui官方文档无果后,打算更换新的框架进行开发&am…...
(一)连续随机量的生成-基于分布函数
连续随机量的生成-基于分布函数 1. 概率积分变换方法(分布函数)2. Python编程实现指数分布的采样 1. 概率积分变换方法(分布函数) Consider drawing a random quantity X X X from a continuous probability distribution with …...
【springboot】Spring Cache缓存:
文章目录 一、导入Maven依赖:二、实现思路:三、代码开发: 一、导入Maven依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId><…...
数学建模-建模算法(4)
python虽然不是完全为数学建模而生的,但是它完整的库让它越来越适合建模了。 - 线性规划:使用scipy.optimize.linprog()函数 python from scipy.optimize import linprogc [-1, 4] A [[-3, 1], [1, 2]] b [6, 4] x0_bounds (None, None) x1_bound…...
python之函数返回数据框
1.原始文件 ##gff-version 3 Chr1A IWGSC_v2.1 gene 40098 70338 33 - . IDTraesCS1A03G0000200;previous_idTraesCS1A02G000100;primconfHC;NameTraesCS1A03G0000200;cdsCDS_OK;mappingfullMatchWithMissmatches Chr1A IWGSC_v2.1 mRN…...
电子商务安全体系架构技术方面
技术方面是本文所要阐述的主要方面,因为它能够依靠企业自 身的努力来达到令人满意的安全保障效果。目前,关于电子商务安全体系的研究比 较多,有基于层次的体系,也有基于对象的体系,还有基于风险管理的体系࿰…...
新安装IDEA 常用插件、设置
新安装IDEA 常用插件、设置 mybatiscodeHelperProRestfulToolkit-fixJrebelmybatis log freepojo to jsonGrep ConsoleMaven HelperCamelCaseCamelCase常用设置 mybatiscodeHelperPro mapper.xml 编码校验 sql 生成,代码生成 RestfulToolkit-fix URI 跳转到对应的…...
HarmonyOS 6 Chip 组件:设置默认后缀图标使用文档
文章目录代码默认后缀图标核心配置1. 启用默认关闭图标2. 显示优先级规则3. 关联配置项代码解析1. 启用默认后缀图标2. 不冲突条件3. 整体结构总结默认后缀图标即 Chip 内置关闭图标,由系统提供样式、尺寸、交互逻辑,无需配置图片资源,只需开…...
ZenTimings:AMD Ryzen用户的硬件监控与性能优化利器
ZenTimings:AMD Ryzen用户的硬件监控与性能优化利器 【免费下载链接】ZenTimings 项目地址: https://gitcode.com/gh_mirrors/ze/ZenTimings 在AMD Ryzen平台日益普及的今天,如何精准掌握硬件运行状态成为许多用户关心的问题。ZenTimings作为一款…...
如何高效批量下载抖音无水印视频:开源工具完整实战指南
如何高效批量下载抖音无水印视频:开源工具完整实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...
2026年,IP地理位置精准查询的几个硬核技术变化
关于IP定位相关最近和几个同行交流,发现大家对IP定位的理解还停留在之前,想把自己这段时间的一些实践整理出来,希望能给同样在搞网络或风控的同行一些参考。 IPv6流量超过IPv4、住宅代理攻击泛滥、CGNAT覆盖越来越广……这些变化正在悄悄改变…...
【RK3588-AI-004】RK3588 AI专属依赖环境预装(Python、OpenCV、基础编译工具)
📖 专栏介绍 本专栏为RK3588 端侧AI开发零基础实战教程,专为嵌入式AI入门、模型部署、视觉开发学习者打造。全程实操、无废话、避坑优化,从零搭建RK3588专属AI开发环境,手把手教学,新手也能轻松上手。 ✅ 硬件适配&am…...
为什么你的ElevenLabs沪语输出像“洋泾浜”?资深ASR工程师用12组基频曲线图揭示声调失准根源
更多请点击: https://codechina.net 第一章:沪语语音合成的声调失准现象全景扫描 沪语(上海话)作为典型的吴语代表,具有复杂的连读变调系统与高辨义性声调特征,这使得其语音合成在声调建模环节极易出现系统…...
企业级Agent开发保姆级教程:从入门到交付,看这一篇就够了
一、背景介绍及核心要点企业级Agent开发正在从探索期迅速迈向规模化落地期。2023年Gartner在最新AI成熟度曲线报告中指出,超过68%的全球大型企业已将多Agent协同列入未来3年核心投资清单。首先,Agent已不再是单一对话机器人,而是集成RAG知识库…...
别再乱加“impressionism”!Midjourney印象派风格生效的3个前置条件,90%新手忽略第2条
更多请点击: https://codechina.net 第一章:印象派风格在Midjourney中的本质误读与认知纠偏 当用户在 Midjourney 中输入 --style raw --s 750 并附加诸如 “impressionist painting” 或 “Monet style” 等提示词时,模型实际响应的并非印…...
【AI绘画构图生死线】:为什么你的提示词再精准也出不了大片?——透视层级、视觉动线与负空间权重分配全拆解
更多请点击: https://kaifayun.com 第一章:AI绘画构图的底层认知革命 传统构图理论建立在人眼视觉经验与经典美学范式之上,而AI绘画的构图逻辑则根植于高维特征空间中的统计分布、注意力权重映射与跨模态对齐机制。当用户输入“晨雾中的孤松…...
免费在线去水印工具哪个好用?2026好用的去水印软件推荐,无广告干净体验
想要快速去除视频或图片上的水印,又不想下载安装应用,在线工具是最便捷的选择。本文为你精选了2026年最实用的免费在线去水印方案,包括专业小程序和web工具,帮你找到真正好用、无广告、完全免费的去水印解决方案。 快速对比&#…...
