【QT】系统托盘图标

来源:互联网 发布:中企动力java面试 编辑:程序博客网 时间:2024/06/15 20:09

功能实现:

1.主窗口如图,有一LCD显示控件:

这里写图片描述

2.在系统托盘区域显示有系统托盘图标的Icon。当点击MainWindow窗口右上角的叉叉时,窗口隐藏,程序仍在运行,Icon仍在右下角。

这里写图片描述

3.右键点击Icon,出现菜单,点击red或green:

这里写图片描述

4.添加如下代码,即使主窗口隐藏,点击菜单red/green,主动激活主窗口并将LCD颜色改变为red或green

    this->activateWindow();    this->showNormal();

5.左键点击或双击Icon,MainWindow回复显示。
6.点击Icon右键菜单的exit,程序退出,Icon消失。

代码实现:

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QtWidgets/QMainWindow>#include <QtWidgets>    //QT5区别于QT4的地方:头文件包含QtGui替换成QtWidgetsnamespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();private slots:      //事件处理函数:     void on_actionRed_triggered(); //加入menu中的actionRed  LCD数字显示为红色    void on_actionGreen_triggered();  //加入menu中的actionGreen LCD数字显示为绿色    void on_actionExit_triggered();  //加入menu中的actionExit 退出程序    //点击或双击Icon时恢复显示主窗口    void OnSystemTrayClicked(QSystemTrayIcon::ActivationReason); private:    Ui::MainWindow *ui;private:    QSystemTrayIcon m_systray;  //声明一个系统托盘图标类的成员变量    virtual void closeEvent(QCloseEvent *event); //重写closeEvent虚函数,                                                 //实现关闭主窗口时退到托盘最小化};#endif // MAINWINDOW_H
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    //事件处理    connect(ui->actionRed,SIGNAL(triggered()),this,SLOT(on_actionRed_triggered()));    connect(ui->actionGreen,SIGNAL(triggered()),this,SLOT(on_actionGreen_triggered()));    connect(ui->actionExit,SIGNAL(triggered(bool)),this,SLOT(on_actionExit_triggered()));    connect(&m_systray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(OnSystemTrayClicked(QSystemTrayIcon::ActivationReason)));    //设置提示文字:当鼠标光标移动到icon上,有文字显示    m_systray.setToolTip("this is a system tray icon");    //设置图标    m_systray.setIcon(QIcon("C:/Users/Maggie/Downloads/set.png"));    //创建菜单对象,加入action    QMenu *menu=new QMenu();    menu->addAction(ui->actionRed);    menu->addAction(ui->actionGreen);    menu->addAction(ui->actionExit);    //为系统托盘图标设置右键菜单    m_systray.setContextMenu(menu);    //显示系统托盘图标    m_systray.show();}MainWindow::~MainWindow(){    delete ui;}void MainWindow::on_actionRed_triggered() {    ui->m_lcd->setPalette(Qt::red);   //加入menu中的actionGreen LCD数字显示为红色    this->activateWindow();    this->showNormal();}void MainWindow::on_actionGreen_triggered() {    ui->m_lcd->setPalette(Qt::green);   //加入menu中的actionGreen LCD数字显示为绿色    this->activateWindow();    this->showNormal();}void MainWindow::on_actionExit_triggered()  {    QApplication::exit(0); //加入menu中的actionExit 退出程序}void MainWindow::OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason){    if(reason==QSystemTrayIcon::Trigger||reason==QSystemTrayIcon::DoubleClick)    {        this->showNormal();   //判断点击或双击时,恢复显示主窗口    }}void MainWindow::closeEvent(QCloseEvent *event){    this->hide();   //重写closeEvent虚函数,实现关闭主窗口时退到托盘最小化           event->ignore();}
原创粉丝点击