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

QT开发技术【QT实现桌面右下角消息】

一、效果 ![](https://i-blog.csdnimg.cn/direct/f02739adb0de455583c97cc889a83fb1.png)

二、弹窗主体部分 noticewidget

/*
**  File name:   NoticeWidget.h
**  Author:      
**  Date:        2025-04-25
**  Brief:       通知栏控件
**  Copyright (C) 1392019713@qq.com All rights reserved.
*/#include "../Include/NoticeWidget.h"
#include <QVBoxLayout>
#include <QPainter>
#include <QBitmap>
#include <QDesktopWidget>
#include <QDesktopServices>
#include <QApplication>CNoticeWidget::CNoticeWidget(QWidget* parent): QWidget(parent)
{m_bMouseEnter = false;setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);setAttribute(Qt::WA_TranslucentBackground);m_pTitleLabel = new QLabel(this);m_pTitleLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft);m_pTitleLabel->setFixedSize(300, 20);m_pTitleLabel->setMargin(5);m_pMessageLabel = new QLabel(this);m_pMessageLabel->setAlignment(Qt::AlignTop);m_pMessageLabel->setWordWrap(true);m_pMessageLabel->setFixedSize(300, 100);QHBoxLayout* m_pTitleLayout = new QHBoxLayout;m_pTitleLayout->setMargin(0);m_pTitleLayout->addWidget(m_pTitleLabel);m_pbtnlose = new QPushButton(this);m_pbtnlose->setStyleSheet("QPushButton { color: white; border: none; }");connect(m_pbtnlose, &QPushButton::clicked, this, &CNoticeWidget::close);m_pbtnlose->setFixedSize(20, 20);m_pbtnlose->setIcon(QIcon(":/Delete.png"));m_pbtnlose->setIconSize(QSize(12, 12));m_pTitleLayout->addWidget(m_pbtnlose);QVBoxLayout* m_pLayout = new QVBoxLayout;m_pLayout->setMargin(0);m_pLayout->addLayout(m_pTitleLayout);m_pLayout->addWidget(m_pMessageLabel);m_pMessageLabel->setMargin(5);setLayout(m_pLayout);setFixedSize(sizeHint().width(), sizeHint().height());m_pShowTimer = new QTimer(this);connect(m_pShowTimer, &QTimer::timeout, this, [this](){static int nBeginY = QApplication::desktop()->height();nBeginY--;move(m_ptShowPos.x(), nBeginY);if (nBeginY <= m_ptShowPos.y()){m_pShowTimer->stop();m_pStayTimer->start(1000);}});m_pStayTimer = new QTimer(this);connect(m_pStayTimer, &QTimer::timeout, this, [this](){static int nTimeCount = 0;nTimeCount++;if (nTimeCount >= 9){m_pStayTimer->stop();m_pCloseTimer->start(200);}});m_pCloseTimer = new QTimer(this);connect(m_pCloseTimer, &QTimer::timeout, this, [this](){static int nTran = 1.0;if (m_bMouseEnter){nTran = 1.0;setWindowOpacity(nTran);return;}nTran -= 0.1;if (nTran <= 0.0){m_pCloseTimer->stop();close();}else{setWindowOpacity(nTran);}});
}CNoticeWidget::~CNoticeWidget()
{}void CNoticeWidget::SetMessage(const QString& qstrTitle, const QString& qstrMessage)
{m_pTitleLabel->setText(qstrTitle);m_pMessageLabel->setText( "  " + qstrMessage);QDesktopWidget* pDeskTop = QApplication::desktop();QRect rcDeskTop = pDeskTop->availableGeometry();m_ptShowPos = QPoint(rcDeskTop.width() - width() - 1, rcDeskTop.height() - height());move(m_ptShowPos.x(), rcDeskTop.height() - 1);show();m_pShowTimer->start(5);
}void CNoticeWidget::paintEvent(QPaintEvent* event)
{QBitmap bitmap(size());bitmap.fill(Qt::white);QPainter painter(this);painter.setBrush(QBrush(QColor(250, 240, 230)));painter.setPen(QPen(QBrush(QColor(250, 222, 173)), 4));painter.drawRoundedRect(bitmap.rect(), 5, 5);setMask(bitmap);QWidget::paintEvent(event);
}void CNoticeWidget::enterEvent(QEvent* event)
{m_bMouseEnter = true;QWidget::enterEvent(event);
}void CNoticeWidget::leaveEvent(QEvent* event)
{m_bMouseEnter = false;QWidget::leaveEvent(event);
}
http://www.xdnf.cn/news/2007.html

相关文章:

  • 通过模仿学习实现机器人灵巧操作:综述(上)
  • 使用 AutoGen 与 Elasticsearch
  • 6.ArkUI Row的介绍和使用
  • 笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
  • 计算机视觉各类任务评价指标详解
  • 8. 深入Spring AI:自定义Advisor
  • 反爬策略应对指南:淘宝 API 商品数据采集的 IP 代理与请求伪装技术
  • OceanBase 复合索引指南
  • 项目maven版本不一致 导致无法下载
  • 人工智能与机器学习:Python从零实现性回归模型
  • 从“能耗大户”到“节能标杆”:安科瑞助力污水处理厂绿色转型
  • 告别进度失控:用燃尽图补上甘特图的监控盲区
  • Windows server:
  • [OS_8] 终端和 UNIX Shell | 会话和进程组 | sigaction | dash
  • 多模态大语言模型(MLLM)- kimi-vl technical report论文阅读
  • 航电系统之自适应航电修复机制篇
  • Flowable7.x学习笔记(十四)查看部署流程Bpmn2.0-xml
  • TestBrain开源程序是一款集使用AI(如deepseek)大模型自动生成测试用例、和测试用例评审、RAG知识库管理的web平台系统
  • 解读《地方标准制定负面清单》与安徽标准复审新规
  • 蜜罐管理和数据收集服务器:Modern Honey Network (MHN)
  • 成熟的前端vue vite websocket,Django后端实现方案包含主动断开websocket连接的实现
  • 企业部署Power BI 报表服务器,在第三方系统嵌套该报表服务器,并实现单点登录
  • 【数据可视化艺术·应用篇】三维管线分析如何重构城市“生命线“管理?
  • 基于Java,SpringBoot,Vue,HTML宠物相亲配对婚恋系统设计
  • 【Python数据库与后端开发】从ORM到RESTful API
  • Dubbo(76)Dubbo的服务注册与发现机制是怎样的?
  • c#接口_抽象类_多态学习
  • RabbitMQ 复习总结
  • 【MFC】 VS2022打开低版本的MFC,双击.rc文件,DIalog加载失败,页面弹窗fatal error RC***:cannot open*****
  • Matplotlib高阶技术全景解析(续):动态交互、三维可视化与性能优化