首页 > 其他分享 >Qt实现系统托盘消息

Qt实现系统托盘消息

时间:2024-11-25 10:35:04浏览次数:7  
标签:Qt 系统托盘 trayIcon 消息 TrayApp include QTimer 图标

实现思路

  1. 创建主应用程序:使用 QApplication 作为应用程序的基础。
  2. 创建系统托盘图标:使用 QSystemTrayIcon 来显示图标在系统托盘中。
  3. 添加右键菜单:为托盘图标添加右键菜单,允许用户选择退出应用程序。
  4. 显示新消息:使用 QTimer 定期触发显示消息,模拟新消息到达的情况。
  5. 处理槽函数:定义槽函数来响应特定事件,例如定时器超时时显示托盘消息。

1.包含必要的头文件

#include <QApplication>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QWidget>
#include <QTimer>
#include <QIcon>
#include <QMessageBox>
#include <QDebug>

2.定义托盘应用程序类

  • 创建一个名为 TrayApp 的类,继承自 QWidget
  • 在构造函数中,初始化系统托盘图标、菜单和定时器。
class TrayApp : public QWidget {
public:
    TrayApp() {
        trayIcon = new QSystemTrayIcon(QIcon(":/Image/QQ图标.png"), this);
        // 创建菜单
        QMenu *menu = new QMenu();
        QAction *exitAction = menu->addAction("Exit");
        connect(exitAction, &QAction::triggered, qApp, &QApplication::quit);
        trayIcon->setContextMenu(menu);
        trayIcon->show();

3.设置定时器

  • 使用 QTimer 来定时触发消息显示。
  • 连接定时器的超时信号到槽函数。
        QTimer *timer = new QTimer(this);
        connect(timer, &QTimer::timeout, this, &TrayApp::simulateNewMessage);
        timer->start(3000); // 每3秒发送一次消息
    }

4.定义槽函数

  • 在私有槽中定义 simulateNewMessage 函数,该函数用于显示系统托盘消息。
private slots:
    void simulateNewMessage() {
        trayIcon->showMessage("新消息", "您有一条新消息!", QSystemTrayIcon::Information);
    }

5.main 函数中创建应用程序实例

  • 创建 QApplication 对象并设置退出行为。
  • 创建 TrayApp 的实例,启动事件循环。
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    app.setQuitOnLastWindowClosed(false);

    TrayApp trayApp; // 创建托盘应用实例
    return app.exec();
}

完整代码

#include <QApplication>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QWidget>
#include <QTimer>
#include <QIcon>
#include <QMessageBox>
#include <QDebug>

class TrayApp : public QWidget {
public:
    TrayApp() {
        trayIcon = new QSystemTrayIcon(QIcon(":/Image/QQ图标.png"), this);

        // 创建菜单
        QMenu *menu = new QMenu();
        QAction *exitAction = menu->addAction("Exit");
        connect(exitAction, &QAction::triggered, qApp, &QApplication::quit);
        trayIcon->setContextMenu(menu);

        // 显示托盘图标
        trayIcon->show();

        // 定时器,模拟新消息
        QTimer *timer = new QTimer(this);
        connect(timer, &QTimer::timeout, this, &TrayApp::simulateNewMessage);
        timer->start(3000); // 每3秒发送一次消息
    }

private slots:
    void simulateNewMessage() {
        trayIcon->showMessage("新消息", "您有一条新消息!", QSystemTrayIcon::Information);
    }

private:
    QSystemTrayIcon *trayIcon; // 使用指针类型以动态创建
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    app.setQuitOnLastWindowClosed(false);

    TrayApp trayApp; // 创建托盘应用实例
    return app.exec();
}

总结

  • 这个代码实现了一个简单的系统托盘应用,能在托盘中显示图标,并定期显示消息。
  • 用户可以通过右键菜单退出应用程序。
  • 通过使用 Qt 的信号和槽机制,代码结构清晰、易于维护与扩展。

标签:Qt,系统托盘,trayIcon,消息,TrayApp,include,QTimer,图标
From: https://www.cnblogs.com/wang1299/p/18567084

相关文章

  • Qt实现全局快捷键
    实现思路使用WindowsAPI在Qt应用程序中注册全局快捷键,使得用户无论在何种情况下都能通过特定的键组合来控制某些功能(例如音乐播放控制)。通过响应消息机制与系统托盘图标结合,提供用户友好的交互界面。实现步骤1.创建Qt应用程序使用QtCreator创建一个新的QtWidget......
  • Qt关于窗口一直调用paintEvent的踩坑实录
    首先看以下代码:voidItemBlockWidget::paintEvent(QPaintEvent*ev){//先调用父类的paintEvent以执行默认绘制行为QWidget::paintEvent(ev);qDebug()<<"ItemBlockWidget重绘";QStyleOptionopt;opt.initFrom(this);QPainterp(this);s......
  • KTL 一个支持C++14写公式的K线工具 - 0.9.2版,通达信mdt全景数据复盘大盘,Qt自定义图表
    K,K线,Candle蜡烛图。T,技术分析,工具平台L,公式Language语言使用c++14,Lite小巧简易。项目仓库:https://github.com/bbqz007/KTL    国内仓库:https://gitee.com/bbqz007/KTL 当前0.9.2新添加功能基于QCharts跟通达信mdt数据文件。使用者能够使用QCharts自定义数据处理图表。......
  • bootstrap4和jQuery消息通知插件
    在线预览  下载 这是一款基于bootstrap4的jQuery消息通知插件。该消息通知插件使用简单,可生成多种主题的toast消息通知,可设置为自动消失或固定时间消失等,非常实用。  使用方法在页面中引入jquery和bootstrap4相关文件,以及notifyMessage相关文件。<linkhref=......
  • uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款
    uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款等功能,界面漂亮颜值高,视频商城小工具等,蚂蚁森林种树养鸡农场偷菜样样齐用于视频,商城,直播,聊天等sumer-alipay介绍uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝......
  • 按键 芯片型号qt2160 linux驱动程序
    /*qt2160.c-AtmelAT42QT2160TouchSenseControllerThisprogramisfreesoftware;youcanredistributeitand/ormodifyitunderthetermsoftheGNUGeneralPublicLicenseaspublishedbytheFreeSoftwareFoundation;eitherversion2oftheLicense,o......
  • 一个基于原生 JavaScript 的简约消息提示插件,非常轻量,不依赖于任何第三方库或框架,使其
    在现代的Web开发中,提供良好的用户反馈是至关重要的。消息提示是其中一种最常见的方式之一,它可以用来向用户传达重要信息、警告或成功状态。然而,为了简化开发者的工作并提供一种轻量级、易于集成的解决方案,Dream-Msg应运而生。Dream-Msg是一个基于原生JavaScript的简约......
  • 【QT】绘图
    个人主页~绘图一、绘图1、基础内容2、绘制形状(1)线段(2)矩形(3)圆形(4)文本(5)画笔(6)画刷3、绘制图片(1)简单图片(2)旋转图片4、其他(1)移动画家位置(2)保存、加载画家的状态5、其他(1)QPixmap(2)QImage修改像素点(3)QPicture一、绘图1、基础内容绘图可以帮助我们实现应对多种场景......
  • RabbitMQ 入门(七)SpringAMQP五种消息类型(Direct Exchange)
    一、发布订阅-DirectExchange(路由模式)在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。DirectExchange会将接收到的消息根据规则路由到指定queue,因此称为路由模式(r......
  • RabbitMQ 入门(四)SpringAMQP五种消息类型(Basic Queue)
    一、SpringAMQP简介SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。SpringAmqp的官方地址:https://spring.io/projects/spring-amqpSpringAMQP提供了三个功能:-自动声明队列、交换机及其绑定关系-基于注解的......