QT 系统托盘练习

QT 系统托盘练习

一、简述

    QT 系统托盘练习,在系统托盘上添加右键菜单

二、效果


三、工程结构


四、源代码

TextTray.pro文件

QT += widgets gui

HEADERS += \
    mymainwindow.h

SOURCES += \
    mymainwindow.cpp \
    main.cpp

mymainwindow.h文件

#ifndef MYMAINWINDOW_H
#define MYMAINWINDOW_H

#include <QMenu>
#include <QMainWindow>
#include <QMouseEvent>
#include <QSystemTrayIcon>

class MyMainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MyMainWindow(QWidget *parent = 0);
public slots:
    void TrayClick(QSystemTrayIcon::ActivationReason);//托盘点击事件
protected:
    void mousePressEvent(QMouseEvent *e);//重写鼠标按下事件
private:
    QSystemTrayIcon* _tray;//系统托盘
    QMenu* _menu;//菜单

};

#endif // MYMAINWINDOW_H

mymainwindow.cpp文件

#include "mymainwindow.h"

MyMainWindow::MyMainWindow(QWidget *parent) :
    QMainWindow(parent)
{

    _tray = new QSystemTrayIcon(this);//创建一个系统托盘
    // _tray->setIcon(QIcon("../text.ico"));//设置图标
    _tray->setToolTip("This is a test");//鼠标移到上面时的文本提示
    _menu = new QMenu(this);//创建菜单
    QAction* exitAction = new QAction("&退出",this);//创建退出动作
    _menu->addAction(exitAction);//将退出动作添加到菜单
    _tray->setContextMenu(_menu);//设置系统托盘的菜单
    _tray->show();//将系统托盘show出来

    //点击系统托盘图标触发事件
    connect(_tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this, SLOT(TrayClick(QSystemTrayIcon::ActivationReason)));
    //点击菜单上的“退出”,触发事件
    connect(exitAction,SIGNAL(triggered()),this,SLOT(close()));
}

void MyMainWindow::TrayClick(QSystemTrayIcon::ActivationReason reason)
{
    if(reason == QSystemTrayIcon::Trigger)//点击系统托盘图标
    {
        if(this->isHidden())//如果是隐藏时点击则显示
        {
            this->show();
        }
        else//如果是显示时点击则隐藏
        {
            this->hide();
        }
    }
}

void MyMainWindow::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::RightButton)//按下鼠标右键
    {
         _menu->exec(QCursor::pos());//在光标位置show出菜单
    }
}

main.cpp文件

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

int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    MyMainWindow w;
    w.setWindowTitle("测试系统托盘");//程序标题
    w.show();//show出窗体
    return app.exec();
}

猜你喜欢

转载自blog.csdn.net/nanfeibuyi/article/details/80295320