QT全局气泡类型提示框【自动宽度、多屏自适应居中】

参考 qt 消息弹出框 ,无框,缓慢自动消失_new messagetips格式-CSDN博客 进行改进。

直接上代码。

头文件:

#pragma once#include <QObject>
#include <QWidget>class MessageTips : public QWidget
{Q_OBJECTpublic:MessageTips(QString showStr = "", QWidget* parent = nullptr);double getOpacityValue() { return m_opacity; };void setOpacityValue(double value) { m_opacity = value; };int getTextSize() { return m_textSize; };void setTextSize(int value) { m_textSize = value; };QColor getTextColor() { return m_textColor; };void setTextColor(const QColor& value) { m_textColor = value; };QColor getBackgroundColor() { return m_bgColor; };void setBackgroundColor(const QColor& value) { m_bgColor = value; };QColor getFrameColor() { return m_frameColor; };void setFrameColor(const QColor& value) { m_frameColor = value; };int getFrameSize() { return m_frameSize; };void setFrameSize(int value) { m_frameSize = value; };int getShowTime() { return m_showTime; };void setShowTime(int value) { m_showTime = value; };void setCloseTimeSpeed(int closeTime = 100, double closeSpeed = 0.1);void prepare();static void showMessageTips(QString showStr, QWidget* parent = nullptr);
protected:void paintEvent(QPaintEvent* event) override;private:QString m_showStr;double m_opacity = 0.8;int     m_textSize = 18;//显示字体大小QColor  m_textColor = QColor(255, 255, 255);//字体颜色QColor  m_bgColor = QColor(192, 192, 192);//窗体的背景色QColor  m_frameColor = QColor(211, 211, 211);//边框颜色int     m_frameSize = 2;//边框粗细大小int     m_showTime = 3500;//显示时间int     m_closeTime = 100;//关闭需要时间double  m_closeSpeed = 0.1;//窗体消失的平滑度,大小0~1
};

cpp文件:

#include "messagetips.h"
#include <QDesktopWidget>
#include <QPainter>
#include <QTimer>
#include <QApplication>
#include <QDebug>MessageTips::MessageTips(QString showStr, QWidget* parent): QWidget(parent),m_showStr(showStr)
{setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool);this->setAttribute(Qt::WA_TranslucentBackground); // ****这里很重要****this->setAttribute(Qt::WA_TransparentForMouseEvents, true);// 禁止鼠标事件this->setAttribute(Qt::WA_DeleteOnClose);this->setFixedHeight(50);QFont font("Arial", m_textSize, QFont::Bold);QFontMetrics fontMetrics(font);int tw = fontMetrics.width(m_showStr);if (tw > 200)this->setFixedWidth(tw + 50);elsethis->setFixedWidth(200);
}void MessageTips::prepare()
{this->setWindowOpacity(m_opacity);connect(this,SIGNAL(finished()),this,SLOT(onFinished()));QTimer* mtimer = new QTimer(this);//隐藏的定时器mtimer->setTimerType(Qt::PreciseTimer);connect(mtimer, &QTimer::timeout, this, [=]() {m_opacity = m_opacity - m_closeSpeed;if (m_opacity <= 0) {mtimer->stop();this->close();return;}elsethis->setWindowOpacity(m_opacity);    });//support for multi-screens.int scrIndex = 0;QDesktopWidget* desktop = QApplication::desktop();QWidget* acWgt = QApplication::activeWindow();if (acWgt){QPoint checkPoint(acWgt->pos().x() + acWgt->width() / 2, acWgt->pos().y() + acWgt->height() / 2);for (int i = 0; i < desktop->screenCount(); i++){if (desktop->screenGeometry(i).contains(checkPoint)){scrIndex = i;break;}}}QRect scrRect = desktop->screenGeometry(scrIndex);//设置屏幕居中显示this->move(scrRect.left() + (scrRect.width() - this->width()) / 2, scrRect.top() + (scrRect.height() - this->height()) / 2);QTimer::singleShot(m_showTime, [=]() {mtimer->start(m_closeTime); });//执行延时自动关闭
}void MessageTips::paintEvent(QPaintEvent* event)
{QPainter painter(this);painter.setBrush(QBrush(m_bgColor));//窗体的背景色painter.setPen(QPen(m_frameColor, m_frameSize));//窗体边框的颜色和笔画大小QRectF rect(0, 0, this->width(), this->height());painter.drawRoundedRect(rect, 10, 10); // round rect//文字显示居中,设置字体,大小,颜色QFont font("Arial", m_textSize, QFont::Bold);painter.setFont(font);painter.setPen(QPen(m_textColor, m_frameSize));painter.drawText(rect,Qt::AlignHCenter | Qt::AlignVCenter,m_showStr);
}//设置关闭的时间和速度,speed大小限定0~1
void MessageTips::setCloseTimeSpeed(int closeTime, double closeSpeed)
{if (closeSpeed > 0 && closeSpeed <= 1) m_closeSpeed = closeSpeed;m_closeTime = closeTime;
}void MessageTips::showMessageTips(QString showStr, QWidget* parent)
{MessageTips* mMessageTips = new MessageTips(showStr, parent);mMessageTips->setShowTime(1500);mMessageTips->prepare();mMessageTips->show();
}

调用方法:

		MessageTips::showMessageTips("OK",this);

运行效果:

运行效果与参考链接类似。

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

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

相关文章

stm32-USART串口外设

配置流程 初始化配置 1.开启时钟&#xff08;打开USART和GPIO的时钟&#xff09; void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); void RCC_APB1Periph…

游戏子弹类python设计与实现详解

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、子弹类设计思路 1. 属性定义 2. 方法设计 三、子弹类实现详解 1. 定义子弹…

ubuntu openvoice部署过程记录,解决python3 -m unidic download 时 unidic无法下载的问题

github给的安装顺序&#xff1a; conda create -n openvoice python3.9 conda activate openvoice git clone gitgithub.com:myshell-ai/OpenVoice.git cd OpenVoice pip install -e .安装MeloTTS: pip install githttps://github.com/myshell-ai/MeloTTS.git python -m unid…

tailwindcss 使用

tailwindcss 使用 1、tailwind.config.js 配置参考2、tailwind.css 配置3、动态生成css类名4、配置了qiankun后&#xff0c;layer不解析了 1、tailwind.config.js 配置参考 module.exports {mode: "jit", // 3.0以上可不用配置&#xff0c;默认该模式&#xff0c;无…

新能源汽车的电驱热管理

前言 新能源汽车的电驱热管理是指维持电动汽车电池、电机和电控系统在适宜的工作温度范围内&#xff0c;保障车辆高效、安全、稳定运行的技术方案。随着新能源汽车的快速发展和普及&#xff0c;电驱热管理技术也日益成为关注焦点。本文将从电池、电机和电控系统三个方面介绍新…

cmake配置opencv与boost库

Cmake配置外部依赖库&#xff08;以Opencv和Boost为例&#xff09; Cmake对于外部依赖库&#xff0c;需要知道外部库的头文件路径&#xff0c;库文件路径以及库的名字。比如&#xff0c;对于要使用的Boost库&#xff0c;需要知道头文件的位置&#xff0c;库目录的位置以及库依…

牛逼!50.3K Star!一个自动将屏幕截图转换为代码的开源工具

1、背景 在当今快节奏的软件开发环境中&#xff0c;设计师与开发者之间的协同工作显得尤为重要。然而&#xff0c;理解并准确实现设计稿的意图常常需要耗费大量的时间和沟通成本。为此&#xff0c;开源社区中出现了一个引人注目的项目——screenshot-to-code&#xff0c;它利用…

vue富文本层级高

在Vue中处理复杂的层级关系&#xff0c;通常可以使用组件和递归组件来构建富文本树形结构。以下是一个简单的例子&#xff0c;展示了如何使用Vue组件来构建一个树形控件 <template><div><tree-node v-for"node in treeData" :key"node.id&quo…

Studio 3T 2024.3 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端,支持自然语言查询

Studio 3T 2024.3 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端&#xff0c;支持自然语言查询 The professional GUI, IDE and client for MongoDB 请访问原文链接&#xff1a;https://sysin.org/blog/studio-3t/&#xff0c;查看最新版。原创作品&#xff…

智能合作:多AI协同助力传统工作流

背景介绍 红杉资本2024 AI AGENT大会上吴恩达再次介绍了AI四大设计模式即&#xff1a; 反思&#xff08;Reflection)&#xff1b;工具使用&#xff08;Tool use&#xff09;&#xff1b;规划&#xff08;Planning)&#xff1b;多智能体协作(Multi-agent collaboration)&#…

基于深度学习和去卷积的盲源分离方法在旋转机械上的应用

关键词&#xff1a;预测性维护、盲源分离、振动分析、传递函数移除、二阶循环平稳性、轴承监测、机器学习 振动是旋转机械中主要的故障指示器&#xff0c;它们主要来源于两个方面&#xff1a;一个是与齿轮相关的振动&#xff08;主要源于齿轮啮合过程中的冲击和不平衡负载&…

【云原生--K8S】K8S python接口研究

文章目录 前言一、搭建ubuntu运行环境1.运行ubuntu容器2.拷贝kubeconfig文件二、python程序获取k8s信息1.获取node信息2.获取svc信息3.常用kubernetes API总结前言 在前面的文章中我们都是通过kubectl命令行来访问操作K8S,但是在实际应用中可能需要提供更方便操作的图形化界面…

(完全解决)Python字典dict如何由键key索引转化为点.dot索引

文章目录 背景解决方案基础版升级版 背景 For example, instead of writing mydict[‘val’], I’d like to write mydict.val. 解决方案 基础版 I’ve always kept this around in a util file. You can use it as a mixin on your own classes too. class dotdict(dict)…

Flutter 中的 StatusTransitionWidget 小部件:全面指南

Flutter 中的 StatusTransitionWidget 小部件&#xff1a;全面指南 在Flutter中&#xff0c;StatusTransitionWidget不是一个内置的组件&#xff0c;但它可以代表一种自定义小部件的概念&#xff0c;用于在不同的状态之间进行转换。例如&#xff0c;这可以是一个网络加载指示器…

浅析深度学习模型的鲁棒性

鲁棒性是指系统或者事物在面对各种不确定性、干扰、变化或攻击时能够保持稳定性和有效性的能力。在计算机科学领域&#xff0c;鲁棒性通常指的是软件、算法或系统在面对各种异常情况或者输入变化时能够正确地运行或者提供合理的输出的能力。 举个例子&#xff0c;一个鲁棒性强的…

LuatOS-Air二次开发学习

LuatOS简介 在介绍LuatOS-Air之前&#xff0c;先介绍下LuatOS。 LuatOS是合宙自研的嵌入式操作系统。覆盖各类物联网应用场景&#xff0c;可运行于4G Cat.1/MCU/NB-IoT/2G/Wi-Fi/蓝牙等等不同的物联网主控芯片。通过完善的嵌入式操作系统LuatOS&#xff0c;使得物联网主控CPU更…

【数据结构课程学习】二叉树_堆:Lesson2

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;数据结构课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 1.二插树的概念和结构 &#x1f697;二叉树的概念&#xff1a; &#x1f697;特殊的二叉树&am…

c++ using 关键字

在C中&#xff0c;using 关键字有多种用途&#xff0c;但最常见的用途之一是在命名空间&#xff08;namespace&#xff09;中引入名称&#xff0c;以避免在代码中频繁使用命名空间前缀。此外&#xff0c;using 还可以用于类型别名&#xff08;typedef 的替代品&#xff09;和模…

Gitee的原理及应用详解(一)

本系列文章简介&#xff1a; Gitee是一款开源的代码托管平台&#xff0c;是国内最大的代码托管平台之一。它基于Git版本控制系统&#xff0c;提供了代码托管、项目管理、协作开发、代码审查等功能&#xff0c;方便团队协作和项目管理。Gitee的出现&#xff0c;在国内的开发者社…

LVS精益价值管理系统 DownLoad.aspx 任意文件读取漏洞复现

0x01 产品简介 LVS精益价值管理系统是杭州吉拉科技有限公司研发的一款专注于企业精益化管理和价值流优化的解决方案。该系统通过集成先进的数据分析工具、可视化的价值流映射技术和灵活的流程改善机制&#xff0c;帮助企业实现高效、低耗、高质量的生产和服务。 0x02 漏洞概述…