【Qt】Qt在Win系统上的消息通知

Qt和Windows消息通信机制 Qt和Windows消息通信机制 Qt Qt是以事件驱动的UI工具集。 大家熟知Signals/Slots在多线程的实现也依赖于Qt的事件处理机制。 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生、分发、接受和处理事件: 1、谁来产生事件: 最容易想到的是我们的输入设备,比如键盘、鼠标产生的 keyPressEvent,keyReleaseEvent,mousePressEvent,mouseReleaseEvent事件(他们被封装成QM. 阅读详情
AI摘要

本文介绍如何使用Qt在Windows系统中创建一个带有鼠标hover效果的窗口,通过QSystemTrayIcon实现系统通知,并结合图片显示/隐藏功能。通过实例展示了如何设置图标、菜单和消息提示,以及如何根据用户的交互操作调整图片状态。

需求描述: Qt应用程序在windows系统上发送win消息通知

代码

代码实现很简单,主要调用的接口为QSystemTrayIcon.showMessage()

使用的Demo为 【Qt】 鼠标 hover 操作时弹出文字气泡_欧恩意的博客-优快云博客 这篇文章,结合图片隐藏显示,在系统显示通知。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QImage>
#include <QPixmap>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QIcon>
#include <QAction>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public:
    QSystemTrayIcon *trayIcon;
private slots:
    void stTrayIconActive(QSystemTrayIcon::ActivationReason acReason);
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QPixmap img(":/Win11.jpg");

    ui->label->setPixmap(img);
    ui->label->setScaledContents(true);
    ui->label->setToolTip(QString("壁纸《Win11.png》"));
    ui->pushButton->setToolTip(QString("隐藏或显示图片"));

    QIcon icon = QApplication::style()->standardIcon((QStyle::StandardPixmap)0);
    QIcon icon1 = QApplication::style()->standardIcon((QStyle::StandardPixmap)9);

    //设置通知栏的图标
    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setIcon(icon);

    //设置通知栏的单击事件
    connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(stTrayIconActive(QSystemTrayIcon::ActivationReason)));

    //设置通知栏的右键菜单
    QMenu * menu = new QMenu();

    //设置菜单项目
    QAction *actionHide = new QAction(icon, "Hide", menu);

    menu->addAction(actionHide);
    trayIcon->setContextMenu(menu);
    // 设置Action的响应
    connect(actionHide, SIGNAL(triggered()), this, SLOT(stActionHide()));
    trayIcon->show();

    //托盘的消息提示
    trayIcon->showMessage("title", "this is a message", icon1);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::stTrayIconActive(QSystemTrayIcon::ActivationReason acReason)
{
    switch (acReason)
    {
    case QSystemTrayIcon::Trigger:
    {
        showNormal();
        break;
    }
    default:
        ;
    }
}

void Widget::on_pushButton_clicked()
{
    QIcon icon = QApplication::style()->standardIcon((QStyle::StandardPixmap)0);
    QIcon icon1 = QApplication::style()->standardIcon((QStyle::StandardPixmap)9);

    if(ui->label->isVisible())
    {
        trayIcon->showMessage("提醒", "隐藏图片", icon1);
        ui->label->hide();
    }
    else
    {
        trayIcon->showMessage("提醒", "显示图片", icon1);
        ui->label->setVisible(true);
    }
}

widget.ui

在这里插入图片描述

演示

在这里插入图片描述

QT线程发送消息通知界面小例 初学QT,有很多地方都不懂,靠着Win32开发的样子写程序到是出了不少问题,摸索中前进。不管是什么开发,都有一条基本的原则:不要在UI线程中进行耗时操作,这样会导致界面卡顿;不要在辅助线程中操作UI界面,这样会导致界面刷新不及时。对于基本的Windows程序,都少不了消息循环和往消息队列中发送消息的函数(SendMessage PostMessage)。查看基类头文件,可以看到详细的接口,一般 阅读详情

相关推荐

Qt系统托盘封装实战:高内聚类设计、跨平台兼容与消息队列优化

系统托盘是桌面应用开发中实现后台驻留与用户即时交互的关键组件,其核心原理是通过操作系统提供的通知区域接口,将应用图标常驻于任务栏。在Qt框架中,QSystemTrayIcon类提供了基础支持,但直接使用常面临代码分散、平台兼容性差、消息易丢失等工程难题。封装一个高内聚的系统托盘类,能有效提升代码可维护性,并通过统一接口管理图标、动态菜单与消息通知,实现业务逻辑与底层细节的解耦。针对实际开发中的高频需求,如动态菜单更新与跨平台图标适配,良好的封装需内置平台差异处理逻辑。特别是对于消息通知,原生接口在快速连续调

weixin_34014555的博客 550

Qt 实现程序图标和通知栏设置-windows

Qt 实现程序图标和通知栏设置-windows平台 在windows平台下的程序图标设置 一般来说在windows平台下设置程序的显示图标,可以通过在.pro文件中设置RC_ICONS 来实现,代码如图所示。 #设置程序的桌面图标--windows平台 RC_ICONS = MyIcon/main.ico 设置系统托盘 系统托盘位于操作系统任务栏的右下角,托盘具有消息提示,右键菜单等功能。下面通过代码来介绍其基本使用方式。 MainWindow::MainWindow(QWidget *parent)

千度寻的博客 2074

Python桌面应用消息提醒功能开发指南

消息提醒功能是现代桌面应用提升用户体验的核心组件,其技术实现涉及操作系统API调用、跨平台兼容性处理等关键技术点。Python通过win10toast、PyQt等库提供了多种实现方案,开发者需要根据目标平台选择原生通知或跨框架方案。在企业级应用中,消息队列管理、点击事件处理和性能优化是关键挑战,合理的架构设计可以确保系统在高并发场景下的稳定性。本文以实际项目为例,详细解析了Windows/macOS双平台通知系统的实现细节,包括优先级处理、持久化存储等高级功能,为Python GUI开发提供实践参考。

weixin_33912453的博客 337

《QT实用小工具·六十四》QT实现仿Windows消息通知控件可交互

该项目实现了仿Windows消息通知功能,包含多个通知显示+定时消失+支持出现/消失动画等功能 允许两种使用方式: 局部通知,通过信号槽和 Lambda 直接获取通知的操作方式 全部通知,触发信号给其他控件使用 另外支持卡片本身、附加三个按钮的点击事件。

cs1395293598的博客 988

win32下Qt5BLE蓝牙开发笔记

BLE简介 BLE蓝牙是蓝牙2.0以上的蓝牙模块,经典蓝牙是蓝牙2.0以下的蓝牙。蓝牙分为客户端和服务器两端,经典蓝牙可以通过socket编程进行客户端与服务器之间的通信(与网络socket相似),BLE蓝牙则无法使用这种方式进行通信。BLE蓝牙下有服务、特征值,所谓的BLE蓝牙通信其实就是对特征值的一个读写操作。微软的Windows下的API关于BLE蓝牙的C++API相对较少,C#的API会相对较多一点。我实现这个蓝牙的demo则是使用了Qt进行一个开发。 需要注意的是Qt中开发所用到的QBlueToo

weixin_46276101的博客 7827

告别弹窗烦恼!用Qt实现一个带渐隐效果的智能消息提示框(附完整源码)

本文详细介绍了如何使用Qt框架实现一个带渐隐效果的智能消息提示框,提升桌面应用的用户体验。通过定时器和透明度变化实现优雅的渐隐动画,同时支持智能定位、样式自定义和交互增强,适用于各种Qt项目开发场景。

weixin_30482383的博客 331

qt 消息处理机制深入分析 (Qt消息机制与window程序消息的对比)

理解Qt消息机制刻不容缓,那我们从对比传统的windows消息处理机制对比来说起; 只有知道QT底层的消息处理、对我们理解并学习Qt有很大帮助; 下面我将对windows程序与Qt对比,并在核心代码处并给出注释进行对比、方便学习。 注意重点看代码中的注视进行对比:! 注意重点看代码中的注视进行对比:! 注意重点看代码中的注视进行对比:! 一:windows程序的消息处理  windows...

liuwb博客 1万+

Qt 实现桌面右下角消息通知弹窗

在Qt Creator中,选择"File" -> “New File or Project”,然后选择"Qt Widgets Application"模板并填写项目名称和路径。在项目中创建一个新的类,命名为"NotificationWindow"。在桌面应用程序中,消息通知弹窗是一种常见的用户界面元素,用于向用户显示重要的系统消息或应用程序事件。在Qt Creator中,选择"Build" -> “Build Project”,然后点击"Run"按钮来启动应用程序。一旦项目创建完成,我们可以开始编写代码。

ByteKnight的博客 1609

Qt 之 消息机制(windows平台下)

窗口函数注册 1 qt_internal_proc qeventdispatcher_win.cpp 138 0x7ffba1078f2b 10 qt_create_internal_window qeventdispatcher_win.cpp 335 0x7ffba107ca31 11 QEventDispatcherWin32::

Black_Silencer的博客 926

QT 实现window和mac下右下角的消息弹窗队列,支持阴影,支持圆角,支持win/mac主题切换判断

窗口圆角,窗口阴影,跨平台主题色的判断,右下角消息弹窗,栈和队列使用

cs821984831的博客 519

Win10环境下Qt实现右下角弹窗功能完整开发指南

仅仅靠 CSS 可能还不够。比如你想画一个带投影的卡片式弹窗,就需要重写paintEvent// 绘制带阴影的圆角矩形// 投影效果(简化版)i <= 5;++i) {// 主体背景是不是瞬间就有质感了?不过要注意性能,复杂的绘图尽量缓存成QPixmap重用。回顾整个旅程,我们从最简单的出发,逐步构建了一个涵盖自定义弹窗、系统托盘、信号解耦、跨平台适配的完整通知体系。但比技术更重要的是理念:通知的目的不是打断用户,而是帮助他们更好地掌控系统状态。

weixin_35916518的博客 592

Windows系统 C++ QT程序 系统托盘图标实现

在QT中系统托盘图标依赖QSystemTrayIcon类,首先要包含相应头文件之后就是创建系统图标的对象,并加载图标文件【注意:以冒号()开头的URL对应的是.qrc文件中定义的资源路径,程序编译阶段通过Qt资源编译器(rcc)将这些资源文件嵌入到程序的二进制文件中,以点(.)或者(..)则表示的是相对路径】随后对系统托盘图标设定需要显示的图标文件完成上述步骤并不能看到实际效果,因为还缺少一个最容易忽略的步骤,显示系统托盘图标。

qq_44459149的博客 674

QT托盘消息模拟QQ消息列表通知

QT实现托盘功能,采用model,View加自定义委托模拟QQ的消息列表通知

Windows下QT实现托盘程序及系统托盘刷新

windows下当程序关闭,有时系统右下角的系统托盘图标还会存在。如不停的关闭和打开程序,任务栏右下角通知区域,同一个图标重复很多。Qt使用QSystemTrayIcon类开发时,也会存在这个问题。方法是调用windows API。.........

kupePoem的专栏 2397

QT实现动画右下角提示信息弹窗

QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动画右下角提示信息弹窗QT实现动

计算机右下角弹出窗口

开发环境 Win10+Qt5.5.1minGw 测试 win10 借鉴别人写的,在写的时候发现有一出错误,做了改动,其它都一样

Qt进阶:事件循环机制深度解析——从QEventLoop到系统消息循环

本文深入解析了Qt事件循环(Event Loop)的核心机制与实现原理。首先介绍了QEventLoop的基本工作流程,包括事件收集、分发和处理的核心环节。随后详细阐述了Qt如何与不同操作系统(Windows/macOS/Linux)的本地事件系统集成,特别是Windows平台的消息转换与派发机制。文章还剖析了QCoreApplication::exec()的内部执行流程,包括初始化、主循环体和系统事件集成三个阶段。最后提供了高级特性说明和最佳实践建议,如避免递归事件循环、处理长时间任务的方法,以及性能优化技

qq_37907545的博客 312

C++使用Qt5实现的消息提醒功能

C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能 C++使用Qt5实现的消息提醒功能

上一篇: 【Qt】 鼠标 hover 操作时弹出文字气泡
下一篇: 【Qt】png和jpg格式的图片(一)
欧恩意
博客等级 码龄7年 677粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值