QSystemTrayIcon Class
QSystemTrayIcon 类为应用程序在系统托盘中提供一个图标。更多内容...
| 头文件: | #include <QSystemTrayIcon> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QObject |
公共类型
| enum | ActivationReason { Unknown, Context, DoubleClick, Trigger, MiddleClick } |
| enum | MessageIcon { NoIcon, Information, Warning, Critical } |
属性
公共函数
| QSystemTrayIcon(QObject *parent = nullptr) | |
| QSystemTrayIcon(const QIcon &icon, QObject *parent = nullptr) | |
| virtual | ~QSystemTrayIcon() |
| QMenu * | contextMenu() const |
| QRect | geometry() const |
| QIcon | icon() const |
| bool | isVisible() const |
| void | setContextMenu(QMenu *menu) |
| void | setIcon(const QIcon &icon) |
| void | setToolTip(const QString &tip) |
| QString | toolTip() const |
公共槽位
| void | hide() |
| void | setVisible(bool visible) |
| void | show() |
| void | showMessage(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int millisecondsTimeoutHint = 10000) |
| void | showMessage(const QString &title, const QString &message, const QIcon &icon, int millisecondsTimeoutHint = 10000) |
信号
| void | activated(QSystemTrayIcon::ActivationReason reason) |
| void | messageClicked() |
静态公共成员
| bool | isSystemTrayAvailable() |
| bool | supportsMessages() |
重新实现的受保护函数
| virtual bool | event(QEvent *e) override |
详细说明
现代操作系统通常在桌面上提供一个特殊区域,称为系统托盘或通知区,长期运行的应用程序可以在该区域显示图标和简短消息。

QSystemTrayIcon 类可在以下平台上使用:
- 所有受支持的 Windows 版本。
- 所有实现了 D-BusStatusNotifierItem 规范的 Linux 桌面环境,包括 KDE、Gnome、Xfce、LXQt 和 DDE。
- 所有针对 X11 且实现了freedesktop.org XEmbed 系统托盘规范的窗口管理器和独立托盘实现。
- 所有受支持的 macOS 版本。
要检查用户桌面上是否存在系统托盘,请调用静态函数QSystemTrayIcon::isSystemTrayAvailable()。
要添加系统托盘条目,请创建一个 QSystemTrayIcon 对象,调用setContextMenu() 为图标提供上下文菜单,并调用show() 使其在系统托盘中显示。可随时使用showMessage() 显示状态通知消息(“气泡消息”)。
如果在构建系统托盘图标时系统托盘不可用,但随后变得可用,且该图标处于visible 状态,则 QSystemTrayIcon 将自动在系统托盘中为该应用程序添加一个条目。
当用户激活图标时,会发出activated() 信号。
仅在 X11 环境下,当请求显示工具提示时,QSystemTrayIcon 会收到类型为QEvent::ToolTip 的QHelpEvent 信号。此外,QSystemTrayIcon 还会收到类型为QEvent::Wheel 的滚轮事件。其他平台不支持这些事件。注意:自 GNOME Shell 3.26 版本起,如果未安装 shell 扩展,系统并不支持所有QSystemTrayIcon::ActivationReason 。
另请参阅《 QDesktopServices》 、《桌面集成》以及《系统托盘图标示例》。
成员类型文档
enum QSystemTrayIcon::ActivationReason
此枚举描述了系统托盘被激活的原因。
| 常量 | 值 | 描述 |
|---|---|---|
QSystemTrayIcon::Unknown | 0 | 未知原因 |
QSystemTrayIcon::Context | 1 | 请求了系统托盘条目的上下文菜单 |
QSystemTrayIcon::DoubleClick | 2 | 双击了系统托盘条目。 注意:在 macOS上 ,只有当未设置上下文菜单时,才会触发双击事件,因为该菜单在鼠标点击时即会打开 |
QSystemTrayIcon::Trigger | 3 | 系统托盘条目被单击 |
QSystemTrayIcon::MiddleClick | 4 | 系统托盘条目被鼠标中键单击 |
另请参阅 activated()。
enum QSystemTrayIcon::MessageIcon
此枚举描述了显示气泡提示时显示的图标。
| 常量 | 值 | 描述 |
|---|---|---|
QSystemTrayIcon::NoIcon | 0 | 不显示图标。 |
QSystemTrayIcon::Information | 1 | 显示信息图标。 |
QSystemTrayIcon::Warning | 2 | 显示标准警告图标。 |
QSystemTrayIcon::Critical | 3 | 显示严重警告图标。 |
另请参阅 QMessageBox 。
属性文档
icon : QIcon
此属性用于存储系统托盘图标
在 Windows 系统中,系统托盘图标的大小为 16x16;在 X11 环境中,推荐大小为 22x22。图标将根据需要缩放至适当的大小。
访问函数:
| QIcon | icon() const |
| void | setIcon(const QIcon &icon) |
toolTip : QString
此属性存储系统托盘条目的工具提示
在某些系统上,工具提示的长度会受到限制。如有必要,工具提示将被截断。
访问函数:
| QString | toolTip() const |
| void | setToolTip(const QString &tip) |
visible : bool
该属性用于控制系统托盘图标是否可见
将此属性设置为 true 或调用 `show()` 会显示系统托盘图标;将此属性设置为 false 或调用 `hide()` 会隐藏该图标。
访问函数:
| bool | isVisible() const |
| void | setVisible(bool visible) |
成员函数文档
QSystemTrayIcon::QSystemTrayIcon(QObject *parent = nullptr)
根据给定的parent 创建一个QSystemTrayIcon对象。
该图标初始状态为不可见。
另请参阅 visible 。
QSystemTrayIcon::QSystemTrayIcon(const QIcon &icon, QObject *parent = nullptr)
根据给定的icon 和parent 创建一个QSystemTrayIcon对象。
该图标初始时不可见。
另请参阅 visible 。
[virtual noexcept] QSystemTrayIcon::~QSystemTrayIcon()
从系统托盘中移除图标,并释放所有已分配的资源。
[signal] void QSystemTrayIcon::activated(QSystemTrayIcon::ActivationReason reason)
当用户激活系统托盘图标时,会触发此信号。reason 指定了激活的原因。QSystemTrayIcon::ActivationReason 列举了各种原因。
另请参阅 QSystemTrayIcon::ActivationReason 。
QMenu *QSystemTrayIcon::contextMenu() const
返回系统托盘条目当前的上下文菜单。
另请参阅 setContextMenu()。
[override virtual protected] bool QSystemTrayIcon::event(QEvent *e)
重写了:QObject::event(QEvent *e)。
QRect QSystemTrayIcon::geometry() const
返回系统托盘图标的几何形状(以屏幕坐标表示)。
另请参阅 visible 。
[slot] void QSystemTrayIcon::hide()
隐藏系统托盘图标。
[static] bool QSystemTrayIcon::isSystemTrayAvailable()
如果系统托盘可用,则返回true ;否则返回false 。
如果系统托盘当前不可用,但随后变得可用,且QSystemTrayIcon 为visible 时, 将自动在系统托盘中添加一个条目。
[signal] void QSystemTrayIcon::messageClicked()
当用户单击了通过showMessage()显示的消息时,会发出此信号。
注意:我们 遵循 Microsoft Windows 的行为规范,因此当用户点击显示气泡提示的系统托盘图标时,也会触发该信号。
另请参阅 activated()。
void QSystemTrayIcon::setContextMenu(QMenu *menu)
将指定的menu 设置为系统托盘图标的上下文菜单。
当用户单击鼠标按钮以调用系统托盘图标的上下文菜单时,该菜单将弹出。
注意: 系统托盘图标 不拥有该菜单的所有权。您必须确保在适当的时候将其删除,例如通过使用合适的父对象来创建该菜单。
另请参阅 contextMenu()。
[slot] void QSystemTrayIcon::show()
在系统托盘中显示图标。
[slot] void QSystemTrayIcon::showMessage(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int millisecondsTimeoutHint = 10000)
在millisecondsTimeoutHint 中指定的时间,为具有给定title 、message 和icon 的条目显示气泡提示。title 和message 必须是纯文本字符串。
用户可以点击该消息;此时将发出messageClicked() 信号。
请注意,消息的显示取决于系统配置和用户偏好设置,因此消息可能根本不会出现。因此,不应将其作为提供关键信息的唯一手段。
在 Windows 上,当应用程序拥有焦点时,millisecondsTimeoutHint 通常会被系统忽略。
在 Qt 5.2 中已转换为插槽。
注意:此 槽已被重载。要连接到此槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
systemTrayIcon, qOverload(&QSystemTrayIcon::showMessage));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
systemTrayIcon, [receiver = systemTrayIcon](const QString &title, const QString &message, QSystemTrayIcon::MessageIcon icon, int millisecondsTimeoutHint) { receiver->showMessage(title, message, icon, millisecondsTimeoutHint); }); 另请参阅 show() 和supportsMessages()。
[slot] void QSystemTrayIcon::showMessage(const QString &title, const QString &message, const QIcon &icon, int millisecondsTimeoutHint = 10000)
为具有给定title 、message 以及自定义图标icon 的条目显示气泡提示,显示时间为millisecondsTimeoutHint 中指定的时间。
注意:此 槽为重载槽。要连接到此槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
systemTrayIcon, qOverload(&QSystemTrayIcon::showMessage));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
systemTrayIcon, [receiver = systemTrayIcon](const QString &title, const QString &message, const QIcon &icon, int millisecondsTimeoutHint) { receiver->showMessage(title, message, icon, millisecondsTimeoutHint); }); [static] bool QSystemTrayIcon::supportsMessages()
如果系统托盘支持气泡提示,则返回true ;否则返回false 。
另请参阅 showMessage()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.