QSystemTrayIcon——实现系统托盘

news2025/7/20 21:08:12

QSystemTrayIcon类

QSystemTrayIcon

QSystemTrayIcon是qt中专门用于处理系统托盘的类

头文件#include
qmakeQT += widgets
SinceQt 4.2
InheritsQObject

QSystemTrayIcon 支持Windows、macos和部分Linux桌面环境,可以通过 QSystemTrayIcon::isSystemTrayAvailable()方法来判断系统是否支持托盘。
要添加系统托盘项,首先,需要创建一个QSystemTrayIcon对象,并调用setContextMenu()为图标提供上下文菜单,然后,调用show()使其在系统托盘中可见。状态通知消息(“气球消息”)可以在任何时候使用showMessage()来进行显示。
当用户激活托盘图标时,activated()信号会被发射。
只有在X11上时,当发出一个tooltip请求时,QSystemTrayIcon会接收一个QEvent::ToolTip类型的QHelpEvent事件。此外,QSystemTrayIcon会接收QEvent::Wheel类型的滚轮事件。这些都是不支持任何其它平台。

Public Types

enum ActivationReason { Unknown, Context, DoubleClick, Trigger, MiddleClick }
此枚举描述了系统托盘被激活的原因。

ConstantValueDescription
QSystemTrayIcon::Unknown0Unknown reason
QSystemTrayIcon::Context1The context menu for the system tray entry was requested
QSystemTrayIcon::DoubleClick2The system tray entry was double clicked.
QSystemTrayIcon::Trigger3The system tray entry was clicked
QSystemTrayIcon::MiddleClick4The system tray entry was clicked with the middle mouse button

enum MessageIcon { NoIcon, Information, Warning, Critical }
此枚举描述了显示气球消息时所显示的图标。

ConstantValueDescription
QSystemTrayIcon::NoIcon0No icon is shown.
QSystemTrayIcon::Information1An information icon is shown.
QSystemTrayIcon::Warning2A standard warning icon is shown.
QSystemTrayIcon::Critical3A critical warning icon is shown.

Properties

icon : QIcon
这个属性保存了系统托盘的图标。
在Windows中,系统任务栏图标的大小是16×16;X11中,首选大小为22x22。必要时该图标将被调整到合适大小。
可以通过以下方法获取:
QIcon icon() const
void setIcon(const QIcon &icon)

toolTip : QString
这个属性保存了系统托盘的提示信息。
在一些系统中,tooltip的长度是有限的,在必要时tooltip将被截断。
可以通过以下方法获取:
QString toolTip() const
void setToolTip(const QString &tip)

visible : bool
这个属性保存了该托盘图标入口是否可见
通过设置该属性为true 或者调用show()来使得托盘图标可见;设置该属性为false或者调用hide()来隐藏托盘图标。
通过以下方法可以获取/修改:
bool isVisible() const
void setVisible(bool visible)

Public Functions

QSystemTrayIcon(const QIcon &icon, QObject *parent = nullptr)
创建一个指定图标和父对象的QSystemTrayIcon 对象,图标初始状态是不可见的。
QSystemTrayIcon(QObject *parent = nullptr)
创建一个指定父对象的QSystemTrayIcon 对象,图标初始状态是不可见的。
virtual ~QSystemTrayIcon()
Removes the icon from the system tray and frees all allocated resources.
QMenu * contextMenu() const
返回系统托盘的当前上下文菜单。
QRect geometry() const
返回系统托盘图标在屏幕上的几何坐标。 Qt 4.3.
QIcon icon() const
获取托盘图标
bool isVisible() const
获取托盘可见属性
void setContextMenu(QMenu *menu)
设置指定菜单为系统托盘的上下文菜单。
当用户通过点击鼠标请求系统托盘的上下文菜单时,菜单会弹出。
在OS X中,一般转换为一个NSMenu,所以aboutToHide()信号不会发出。

注意:系统托盘菜单并不对菜单有所有权,必须确保在恰当的时候删除菜单,例如:创造一个具有合适父对象的菜单。

void setIcon(const QIcon &icon)
设置托盘图标
void setToolTip(const QString &tip)
设置系统托盘的提示信息。
QString toolTip() const
获取系统托盘的提示信息。

Public Slots

void hide()
隐藏系统托盘。
void setVisible(bool visible)
设置系统托盘是否可见。
设置为true或调用show()使系统托盘图标可见;设置为false或调用hide()隐藏它。
void show()
显示系统托盘。
void showMessage(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int millisecondsTimeoutHint = 10000)
显示一个气球消息,使用所给出的标题、消息、图标和指定的时间,标题和消息必须是纯文本字符串。
消息可以被用户点击,当用户点击时发出messageClicked()信号 。
Note that display of messages are dependent on the system configuration and user preferences, and that messages may not appear at all. Hence, it should not be relied upon as the sole means for providing critical information.
On Windows, the millisecondsTimeoutHint is usually ignored by the system when the application has focus.
Has been turned into a slot in Qt 5.2.
This function was introduced in Qt 4.3.

void showMessage(const QString &title, const QString &message, const QIcon &icon, int millisecondsTimeoutHint = 10000)

This function overloads showMessage().

Shows a balloon message for the entry with the given title, message, and custom icon icon for the time specified in millisecondsTimeoutHint.

This function was introduced in Qt 5.9.

Signals

void activated(QSystemTrayIcon::ActivationReason reason)
当用户激活系统托盘图标,这个信号被发射。reason指定激活的原因, QSystemTrayIcon::ActivationReason列举了各种原因。

void messageClicked()
当使用showMessage()显示的消息被用户点击时,此信号被发射。

Note: We follow Microsoft Windows behavior, so the signal is also emitted when the user clicks on a tray icon with a balloon message displayed.

Static Public Members

bool isSystemTrayAvailable()
如果系统托盘可用,返回true;否则,返回false。
如果系统盘是当前不可用,但以后变为可用,若QSystemTrayIcon可见,它就会自动在系统托盘中添加条目。

bool supportsMessages()
如果系统托盘支持气球消息,则返回true;否则,返回false。

Reimplemented Protected Functions

virtual bool event(QEvent *e) override

Reimplements: QObject::event(QEvent *e).

使用

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    w.setupSystemTray();
    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSystemTrayIcon>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void setupSystemTray();

private:
    QSystemTrayIcon *trayIcon = nullptr;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QApplication>
#include <QDesktopWidget>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle(tr("系统托盘"));
    resize(400, 400);
    move((QApplication::desktop()->width() - width())/2,
         (QApplication::desktop()->height() - height())/2);
}

Widget::~Widget()
{
}

void Widget::setupSystemTray()
{
    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setIcon(QIcon(":/tray.png"));
    trayIcon->show();
}


效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0基础学习——了解操作符的那些事(一)

小叮当的任意门操作符分类1. 算数操作符2. 移位操作符二进制&#xff08;小插曲&#xff09;左移动操作符右移操作符3. 位操作符& 按位与 &按位或 |按位异或 ^赋值操作符复合赋值符单目操作符操作符分类 在这里我们有&#xff1a;算数操作符 移位操作符 等 今天我们就先…

uni-App获取地图address与高德地图API配合

现在使用获取地图&#xff0c;不需要再去安装sdk&#xff0c;只需要和我一样执行下方代码可以解决问题&#xff08;这里会从先获取经纬度&#xff0c;再到经纬度转成具体的地址&#xff0c;最后补充定位当前位置&#xff09;&#xff0c;并且当中会提及到很多&#xff0c;自己开…

深度学习模型的参数、计算量和推理速度统计

在没有过拟合的情况下&#xff0c;相同模型结构下&#xff0c;一般模型的参数量和计算量与最终的性能成正比&#xff0c;在比较不同模型性能时&#xff0c;最好能保持模型参数量和计算量在相同水平下&#xff0c;因此相应参数的统计很重要。这里只进行理论计算&#xff0c;最终…

MySQL的下载与安装

1. 下载地址 官网&#xff1a;https://www.mysql.com 2. 打开官网&#xff0c;点击DOWNLOADS 然后&#xff0c;点击 MySQL Community(GPL) Downloads 3. 点击 MySQL Community Server 这里在Windows 系统下推荐下载 MSI安装程序 &#xff1b; 点击 My Go to Download Page…

中国医药院外流通市场分析

医药流通行业概览 医药流程市场主要分为院内、院外。 与院内市场终端相比&#xff0c;院外市场终端(特别是基层医疗层级终端)数量更多、规模更 小以及分布分散。此外&#xff0c;院外市场终端的服务区域半径有限&#xff0c;仅服务于一定地理区域内的 终端客户。因此&#xff…

【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)

本文是《ES6 类聊 JavaScript 设计模式》的第四篇&#xff0c;介绍第三种类型的设计模式行为设计模式&#xff0c;其特别关注对象之间的通信。 在软件工程中&#xff0c; 行为型模式为设计模式的一种类型&#xff0c;用来识别对象之间的常用交流模式并加以实现。如此&#xff0…

【Linux】进程控制

目录&#x1f308;前言&#x1f338;1、进程创建&#x1f361;1.1、概念&#x1f362;1.2、fork()之后执行顺序&#x1f367;1.3、fork()返回值&#x1f368;1.4、写时拷贝&#x1f369;1.5、fork创建失败问题&#x1f341;2、进程终止&#x1f372;2.1、概念&#x1f371;2.2、…

【附源码】Python计算机毕业设计数据学院工作量管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

力扣刷题day48|583两个字符串的删除操作、72编辑距离

文章目录583. 两个字符串的删除操作动态规划思路一动态规划思路二动态规划五部曲72. 编辑距离思路动态规划五部曲583. 两个字符串的删除操作 力扣题目链接 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符…

K_A05_001 基于 STM32等单片机驱动8X8点阵模块(MAX7219)显示0-9

目录 一、资源说明 二、基本参数 1、参数 2、引脚说明 三、通信协议说明 工作时序 对应程序: 四、部分代码说明 1、接线说明 1.1、STC89C52RC8X8点阵模块&#xff08;MAX7219&#xff09; 1.2、STM32F103C8T68X8点阵模块&#xff08;MAX7219&#xff09; 2、亮度调节 五、基…

Python中内置数据库!SQLite使用指南!

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; Python3◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/56 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/390 &#x1f4e2; 声明&#xff1a;版权所有&#xf…

Docker数据卷

Docker数据卷、Docker安全Docker数据卷Docker数据卷管理bind mountdocker数据卷两种方式不同和相同卷插件简介convoy卷插件实践Docker数据卷 主要解决存储问题、容器数据滞留 Docker数据卷管理 bind mount “-v”宿主机路径容器内nginx发布目录 新建一个首页 现在容器内目录…

猿创征文|工具百宝箱-编辑器-笔记工具-日常小工具-原型设计工具

这篇文主要介绍了开发者工具之外的一些日常小工具&#xff0c;我用这些小工具主要完成什么工作。分享给大家 官方活动入口&#xff1a;「猿创征文 」第四季 | 2022 年我的开发者工具 猿创征文&#xff5c;工具百宝箱-代码编辑器-版本控制工具-终端神器-项目与事务跟踪工具-SFTP…

pdf文件转txt怎么转?这几个方法你值得收藏

平时我们在网络上搜索资料的时候&#xff0c;会发现很多资料都是以PDF格式显示的&#xff0c;虽然这种文件格式很方便我们查看&#xff0c;但是如果将其保存到手机中&#xff0c;又太占用内存了。其实我们可以将其转换成txt格式&#xff0c;因为我发现它不仅不占空间&#xff0…

助力数据中心双碳发展,存储如何变得越来越绿?

2022年11月10日&#xff0c;我看到曙光发了首款液冷存储&#xff0c;目标锁定数据中心PUE1.1以下。在“双碳”发展趋势下&#xff0c;聚焦液冷存储与液冷服务器的创新&#xff0c;曙光对绿色数据中心的可持续发展将带来行业引领效应。 双碳大趋势下&#xff0c;绿色存储呼之欲出…

计算机网络复习

考试重点 要掌握OSI七层模型&#xff0c; 会根据数据画模拟和数字信号的图&#xff0c;尤其是TCP和UDP所提供的服务&#xff0c; 掌握TCP连接建立和释放的完整过程&#xff0c; 掌握滑动窗口的概念&#xff0c; 还要了解端到端的含义&#xff0c; 了解ARP、ICMP、CIDR等协议的…

干了3年软件测试,2022年我离职了...

今天在网上刷到一个帖子&#xff0c;说软件测试岗&#xff0c;在公司呆了三年&#xff0c;由于疫情原因&#xff0c;公司效益不是很好&#xff0c;加上自己的技术一直停留在功能测试&#xff0c;在公司可有可无&#xff0c;被公司裁后找不到工作… 逛百度贴吧、逛技术论坛&…

[附源码]java毕业设计基于servlet技术实现游戏娱乐平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

FFplay文档解读-48-多媒体过滤器二

32.8 ebur128 EBU R128扫描仪滤光片。此过滤器将音频流作为输入并以不变的方式输出。默认情况下&#xff0c;它以10Hz的频率记录消息&#xff0c;具有瞬时响度&#xff08;由M标识&#xff09;&#xff0c;短期响度&#xff08;S&#xff09;&#xff0c;集成响度&#xff08;…

简单工厂,工厂方法,抽象工厂模式

软件设计七大原则 一、简单工厂&#xff08;静态工厂方法&#xff09; 它存在的目的很简单&#xff1a;定义一个创建对象的接口。组成&#xff1a; 工厂类角色&#xff1a;这是本模式的核心&#xff0c;含有一定的商业逻辑和判断逻 辑。在java中它往往由一个具体类实现。 抽…