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();

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/86163.html

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

相关文章

IDEA启动两个Tomcat服务的方式 使用nginx进行反向代理 JMeter测试分布式情况下synchronized锁失效

目录 引出IDEA启动Tomcat两个端口的方式1.编辑配置2.添加新的端口-Dserver.port80833.service里面管理4.启动后进行测试 使用nginx进行反向代理反向代理多个端口运行日志查看启动关闭重启 分布式情况下synchronized失效synchronized锁代码启动tomcat两个端口nginx反向代理JMete…

Python3 字典

Python3 字典 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#xff0c;每个对之间用逗号(,)分割&#xff0c;整个字典包括在花括号 {} 中 ,格式如下所示&#xff1a; d {key1 : value1, key2 : value2, key3…

列式存储引擎-内核机制-Parquet格式

列式存储引擎-内核机制-Parquet格式 Parquet是一种开源的列式存储结构&#xff0c;广泛应用于大数据领域。 1、数据模型和schema Parquet继承了Protocol Buffer的数据模型。每个记录由一个或多个字段组成。每个字段可以是atomic字段或者group字段。Group字段包含嵌套的字段&…

开源与专有软件:比较与对比

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

2023年高教社杯 国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

C语言——指针进阶(一)

目录 ​编辑 一.字符指针 1.1 基本概念 1.2 面试题 二.指针数组 三.数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 四.数组参数、指针参数 4.1 一维数组传参 ​编辑 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 ​编辑 五.…

C语言链表梳理-2

链表头使用结构体&#xff1a;struct Class 链表中的每一项使用结构体&#xff1a;struct Student#include <stdio.h>struct Student {char * StudentName;int StudentAge;int StudentSex;struct Student * NextStudent; };struct Class {char *ClassName;struct Stude…

FxFactory 8 Pro Mac 苹果电脑版 fcpx/ae/motion视觉特效软件包

FxFactory pro for mac是应用在Mac上的fcpx/ae/pr视觉特效插件包&#xff0c;包含了成百上千的视觉效果&#xff0c;打包了很多插件&#xff0c;如调色插件&#xff0c;转场插件&#xff0c;视觉插件&#xff0c;特效插件&#xff0c;文字插件&#xff0c;音频插件&#xff0c;…

【内网穿透】搭建我的世界Java版服务器,公网远程联机

目录 前言 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安装cpolar内网穿透 3.1.1 windows系统 3.1.2 linux系统&#xff08;支持一键自动安装脚本&#xff09; 3.2 创建隧道映射内网端口 3.3 测试公网远程…

PHP聚合支付网站源码/对接十多个支付接口 第三方/第四方支付/系统源码

PHP聚合支付网站源码/对接十多个支付接口 第三方/第四方支付/系统源码 内附数十个支付接口代码文件。 下载地址&#xff1a;https://bbs.csdn.net/topics/616764485

Apache StreamPark系列教程第一篇——安装和体验

一、StreamPark介绍 实时即未来,在实时处理流域 Apache Spark 和 Apache Flink 是一个伟大的进步,尤其是Apache Flink被普遍认为是下一代大数据流计算引擎, 我们在使用 Flink & Spark 时发现从编程模型, 启动配置到运维管理都有很多可以抽象共用的地方, 我们将一些好的经验…

【Day-21慢就是快】代码随想录-栈与队列-逆波兰表达式求值

逆波兰表达式&#xff1a;是一种后缀表达式&#xff0c;所谓后缀就是指运算符写在后面。 平常使用的算式则是一种中缀表达式&#xff0c;如 ( 1 2 ) * ( 3 4 ) 。 该算式的逆波兰表达式写法为 ( ( 1 2 ) ( 3 4 ) * ) 。 逆波兰表达式主要有以下两个优点&#xff1a; 去掉…