Qt 系统托盘

本文介绍了如何在Qt中创建并使用系统托盘,包括创建菜单、响应操作以及使用Linguist进行中文翻译和通过qss设置字体。示例代码包含SystemTray类的头文件和实现文件。
摘要由CSDN通过智能技术生成
写了一个Qt 系统托盘类SystemTray:

用法:

systemTray = new SystemTray(this, ":trayicon/offline");

 

可重写createMenu定制复杂效果。   
运行即可得到一个简易系统托盘和简单响应,效果如下:

使用Linguist翻译成中文[Qt Linguist用法],效果如下:

使用qss 设置字体大小(微软雅黑12px) [Qt qss设置文件],效果如下:

 

SystemTray类:

.h

#ifndef SYSTEMTRAY_H
#define SYSTEMTRAY_H

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

class SystemTray : public QObject
{
    Q_OBJECT
public:
    explicit SystemTray(QWidget *w, const QString& iconFileName);
    
    void setTrayIcon(const QString &iconFileName);
    void setToolTip(const QString &tip);

    virtual void retranslate();
signals:

public slots:
    void iconActivated(QSystemTrayIcon::ActivationReason reason);
private:
    QWidget *widget;

    QIcon icon;
    QSystemTrayIcon *trayIcon;

    QAction *showAction;
    QAction *quitAction;

protected:
    QMenu *trayIconMenu;
    virtual void createMenu();
private:
    void createActions();
    void createTrayIcon();
};

#endif // SYSTEMTRAY_H


.cpp

#include "systemtray.h"
#include <QApplication>

#include <QCoreApplication>

SystemTray::SystemTray(QWidget *w, const QString &iconFileName) :
    QObject(), widget(w)
{
    icon = QIcon(iconFileName);
    createMenu();
    createTrayIcon();
    trayIcon->show();

    connect(trayIcon, &QSystemTrayIcon::activated, this, &SystemTray::iconActivated);

    retranslate();
}

void SystemTray::createMenu()
{
    showAction = new QAction(widget);
    connect(showAction, &QAction::triggered, widget, &QWidget::showNormal);

    quitAction = new QAction(widget);
    //connect(quitAction, &QAction::triggered, this, &SystemTray::quitTriggered);// 编译错误
    connect(quitAction, &QAction::triggered, &QApplication::quit);// 新的connect写法,允许省略接受者

    // 注意:trayIconMenu的父类为desktop,如果为this,则右键单击托盘不选中时,托盘菜单不消失。
    trayIconMenu = new QMenu((QWidget*)QApplication::desktop());

//    trayIconMenu->setStyleSheet("QMenu{font-size: 12px;}");

    trayIconMenu->addAction(showAction);
    trayIconMenu->addSeparator();
    trayIconMenu->addAction(quitAction);
}

void SystemTray::retranslate()
{
    showAction->setText(tr("show"));
    quitAction->setText(tr("quit"));
}

void SystemTray::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
    switch (reason) {
    case QSystemTrayIcon::Trigger: // 单击
    case QSystemTrayIcon::DoubleClick:// 双击
        widget->showNormal();
        break;
    case QSystemTrayIcon::MiddleClick:

        break;
    default:
        ;
    }
}

void SystemTray::createTrayIcon()
{
    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setContextMenu(trayIconMenu);

    trayIcon->setIcon(icon);
    trayIcon->setToolTip("Tray tool tip");
}

void SystemTray::setTrayIcon(const QString &iconFileName)
{
    trayIcon->setIcon(QIcon(iconFileName));
}

void SystemTray::setToolTip(const QString &tip)
{
    trayIcon->setToolTip(tip);
}


 Tips: 注意,在注释的时候,请在// 空格再加注释,能避免解析错误。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值