Qt之设置系统托盘

来源:互联网 发布:微控制器是单片机 编辑:程序博客网 时间:2024/06/05 03:23
头文件:
#ifndef SYSTEMTRAYICON_H#define SYSTEMTRAYICON_H#include <QWidget>#include <QSystemTrayIcon>#include <QMenu>#include <QAction>#include <QCloseEvent>class SystemTrayIcon : public QWidget{    Q_OBJECTpublic:    explicit SystemTrayIcon(QStringList strList, QIcon icon, QWidget *parent = 0);    ~SystemTrayIcon();    void createAct();    void createTrayMenu();    void createTrayIcon();public slots:    void slot_iconActivated(QSystemTrayIcon::ActivationReason reason);public:    QAction *actFixed;                  //固定位置private:    QSystemTrayIcon *m_trayIcon;        //系统托盘    QMenu *menu;                        //菜单    QAction *actMin;                    //最小化    QAction *actNormal;                 //正常    QAction *actExit;                   //退出    QStringList m_strList;              //托盘信息    QIcon m_icon;                       //托盘图标    QWidget *pWidget;                   //父对象};#endif // SYSTEMTRAYICON_H
源文件:
#include "systemtrayicon.h"#include <QApplication>#include <QDebug>SystemTrayIcon::SystemTrayIcon(QStringList strList, QIcon icon, QWidget *parent)    : QWidget(parent){    pWidget = parent;    m_strList = strList;    m_icon = icon;    createAct();    createTrayMenu();    createTrayIcon();}SystemTrayIcon::~SystemTrayIcon(){}void SystemTrayIcon::createAct(){    actFixed = new QAction("锁定位置(&F)",this);    actFixed->setCheckable(true);    actFixed->setChecked(true);    actMin = new QAction("最小化(&N)",this);    connect(actMin,SIGNAL(triggered()),pWidget,SLOT(hide()));    actNormal = new QAction("还 原(&R)",this);    connect(actNormal,SIGNAL(triggered()),pWidget,SLOT(showNormal()));    actExit = new QAction("退出(&Q)",this);    connect(actExit,SIGNAL(triggered()),qApp,SLOT(quit()));}void SystemTrayIcon::createTrayMenu(){    menu = new QMenu((QWidget*)QApplication::desktop());    menu->addAction(actFixed);    menu->addAction(actMin);    menu->addAction(actNormal);    menu->addSeparator();     //加入一个分离符    menu->addAction(actExit);}void SystemTrayIcon::createTrayIcon(){    if (!QSystemTrayIcon::isSystemTrayAvailable())      //判断系统是否支持系统托盘图标    {        return;    }    m_trayIcon = new QSystemTrayIcon(pWidget);    m_trayIcon->setIcon(m_icon);   //设置图标图片    m_trayIcon->setToolTip(m_strList.at(1));    //托盘时,鼠标放上去的提示信息    m_trayIcon->showMessage(m_strList.at(0), m_strList.at(1), QSystemTrayIcon::Information, 10000);    m_trayIcon->setContextMenu(menu);     //设置托盘上下文菜单    m_trayIcon->show();    connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this,            SLOT(slot_iconActivated(QSystemTrayIcon::ActivationReason)));}void SystemTrayIcon::slot_iconActivated(QSystemTrayIcon::ActivationReason reason){        switch (reason) {    case QSystemTrayIcon::Unknown:        break;    case QSystemTrayIcon::Context:        break;    case QSystemTrayIcon::DoubleClick:        pWidget->setWindowState(Qt::WindowActive);        pWidget->show();        break;    case QSystemTrayIcon::Trigger:        break;    case QSystemTrayIcon::MiddleClick:        break;    default:        break;    }}
父对象中引用(设置系统托盘):
    //设置任务栏系统托盘    QStringList strList;    strList << "Rose" << "Rose V1.0";    QIcon icon(":/images/3.png");    SystemTrayIcon *trayIcon = new SystemTrayIcon(strList, icon, dlg);    connect(trayIcon->actFixed, SIGNAL(triggered(bool)), dlg, SLOT(slot_fixed(bool)));
效果图:
0 0
原创粉丝点击