Qt笔记(二十四)之系统托盘QSystemTrayIcon

104 篇文章 125 订阅

一.前言
工作中,有些用户喜欢点击最小化的时候,软件图标显示到右下角(系统托盘),并想增加一些菜单,双击又还原窗口,故此把系统托盘功能单独拿出来,以此做个记录
二.实现过程
1.核心是利用Qt提供的QSystemTrayIcon
2.核心代码,附带注释

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

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

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

void Widget::on_pushButton_clicked()
{
    systemIcon = new QSystemTrayIcon();

    // 设置提示语
    systemIcon->setToolTip("这是系统系统图标");

    // 设置图标
    systemIcon->setIcon(QIcon("://Icon.png"));

    // 增加托盘菜单
    QMenu *menu = new QMenu();
    QAction *a1 = new QAction("菜单1");
    QAction *a2 = new QAction("菜单2");
    menu->addAction(a1);
    menu->addAction(a2);
    systemIcon->setContextMenu(menu);
    connect(a1,SIGNAL(triggered(bool)),this,SLOT(onA1(bool)));
    connect(a2,SIGNAL(triggered(bool)),this,SLOT(onA2(bool)));

    // 关联拖盘事件
    connect(systemIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(onActivated(QSystemTrayIcon::ActivationReason)));

    //
    systemIcon->show();

    // 要在show之后调用
    systemIcon->showMessage("showMessage","系统托盘提示",QSystemTrayIcon::MessageIcon::Information,500);
}

void Widget::onActivated(QSystemTrayIcon::ActivationReason action)
{
    qDebug()<<action;
    if(action==QSystemTrayIcon::ActivationReason::Unknown){
        qDebug()<<"未知点击";
    }
    else if(action==QSystemTrayIcon::ActivationReason::Context || action==QSystemTrayIcon::ActivationReason::Trigger){
        qDebug()<<"鼠标单击";
    }
    else if(action==QSystemTrayIcon::ActivationReason::DoubleClick){
        qDebug()<<"鼠标双击";
    }
    else if(action==QSystemTrayIcon::ActivationReason::MiddleClick){
        qDebug()<<"鼠标中间单击";
    }else{
        return;
    }
}

void Widget::onA1(bool b)
{
    qDebug()<<"这是菜单1";
}

void Widget::onA2(bool b)
{
    qDebug()<<"这是菜单2";
}

3.效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三.源码下载链接

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的C++图形用户界面应用程序开发框架。定制个性化系统托盘菜单需要使用Qt的相关类和方法来实现。 首先,需要创建一个QSystemTrayIcon对象,用于在系统托盘中显示图标和相关菜单。可以通过设置图标、提示信息等属性来定制托盘图标的外观。例如,可以使用setIcon()函数设置托盘图标,setToolTip()函数设置提示信息。 其次,为了实现托盘菜单,需要使用QMenu和QAction类。可以使用addAction()函数向菜单中添加动作(QAction),例如打开某个功能窗口、显示关于界面或退出程序。可以使用addSeparator()函数在菜单中插入分隔符。可以使用setEnabled()函数设置动作的启用状态。 此外,还可以使用addMenu()函数在菜单中添加子菜单。子菜单可以通过添加动作的方式来进一步定制菜单内容。例如,可以创建一个子菜单,用于显示不同的主题选择。 当用户点击菜单项时,可以连接对应的槽函数来执行相应的操作。例如,可以使用connect()函数将菜单项的triggered()信号与对应的槽函数连接起来。 最后,调用show()函数显示托盘菜单,然后通过exec()函数进入主事件循环,等待用户操作。 总之,通过使用Qt的相关类和方法,可以方便地定制个性化系统托盘菜单。仿照360安全卫士的托盘菜单,只需要根据具体需求创建对应的菜单项和子菜单即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值