博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Qt开发】实现系统托盘,托盘菜单,托盘消息
阅读量:5289 次
发布时间:2019-06-14

本文共 2531 字,大约阅读时间需要 8 分钟。

概述

系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域,linux在布告栏区域。应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能。

 演示Demo实现功能:

1.应用启动后,任务栏,系统托盘可以看到该程序。

2.点击右上角×关闭窗口,自动隐藏窗口,托盘可以看到该程序。

3.鼠标在托盘图标上右键,弹出"退出程序"菜单栏,并带有图标。

步骤:

1.工程中新建TrayDialog类,基类是QDialog,在界面上添加Text Browser控件和提示信息。

 

2.在TrayDialog.h头文件中添加#include <QtWidgets>包含文件

3.添加成员变量

    QSystemTrayIcon m_systray,

  信号槽响应函数

    int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason);

    int OnExit();

  重写closeEvent(QCloseEvent *event)函数,完整代码如下:

#pragma once#pragma execution_character_set("utf-8")#include 
#include
#include "ui_TrayDialog.h"class TrayDialog : public QDialog{ Q_OBJECTpublic: TrayDialog(QWidget *parent = Q_NULLPTR); ~TrayDialog();private: void closeEvent(QCloseEvent *event);private slots: int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason); int OnExit();private: Ui::TrayDialog ui; QSystemTrayIcon m_systray;};

4.在Qt Designer中添加Action,用于托盘右键退出程序。

 

5.构造函数TrayDialog(QWidget *parent)中添加如下代码:

//设置提示文字    m_systray.setToolTip("系统托盘演示程序");    // 设置托盘图标    m_systray.setIcon(QIcon(":/qtlearn/Resources/EXE.ico"));    //托盘菜单项    QMenu * menu = new QMenu();    menu->addAction(ui.actionExit);    m_systray.setContextMenu(menu);    // 关联托盘事件    connect(&m_systray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),        this, SLOT(OnSystemTrayClicked(QSystemTrayIcon::ActivationReason)));    //显示托盘    m_systray.show();    //托盘菜单响应    connect(ui.actionExit, SIGNAL(triggered()), this, SLOT(OnExit()));

 

6.关闭窗口事件响应函数

/************************************@ Brief:        点击关闭窗口@ Author:        woniu201 @ Created:        2019/03/21@ Return:            ************************************/void TrayDialog::closeEvent(QCloseEvent *event){    this->hide();    event->ignore();}

 

7.双击/单击托盘应用程序响应函数

/************************************@ Brief:        双击/单击托盘事件@ Author:        woniu201@ Created:        2019/03/21@ Return:************************************/int TrayDialog::OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason){    if (reason == QSystemTrayIcon::Trigger        || reason == QSystemTrayIcon::DoubleClick)    {        // 显示主窗口        this->showNormal();    }    return 0;}

8.托盘右键退出响应函数

/************************************@ Brief:        托盘菜单退出@ Author:        woniu201 @ Created:        2019/03/21@ Return:            ************************************/int TrayDialog::OnExit(){    QApplication::exit(0);    return 0;}

 9.启动后效果如下

 

 

 

转载于:https://www.cnblogs.com/woniu201/p/10573431.html

你可能感兴趣的文章
第八章、函数进阶之三元表达式和列表推导式
查看>>
第八章、生成器
查看>>
第八章、函数进阶之字典生成式与匿名函数
查看>>
第九章、模块的四种形式
查看>>
第八章、函数递归与面向过程编程
查看>>
第九章、import 和from ...import
查看>>
第九章、模块的循环导入问题及模块的路径搜索
查看>>
第九章、python文件的两种用途
查看>>
第九章、包
查看>>
第十章、time模块
查看>>
第十章、datetime模块
查看>>
第十章、sys模块
查看>>
第十章、random模块
查看>>
第十章、hashlib模块和hmac模块
查看>>
第十章、json和pickle模块
查看>>
第十章、logging模块
查看>>
第十章、typing模块
查看>>
第十章、numpy模块
查看>>
第十章、jupyter入门之pandas
查看>>
第十章、collections
查看>>