Qt之設置系統托盤

頭文件:
#ifndef SYSTEMTRAYICON_H
#define SYSTEMTRAYICON_H

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

class SystemTrayIcon : public QWidget
{
    Q_OBJECT
public:
    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)));
效果圖:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章