当前位置: 首页 > news >正文

Qt系统托盘与可执行程序图标

Qt系统托盘与可执行程序图标

目录
  • Qt系统托盘与可执行程序图标
    • 系统托盘
      • 官方文档描述
      • 使用案例(Qt官方案例)
    • 设置应用和可执行图标


箴言:心有花木,向阳而生。

系统托盘

官方文档描述

现代操作系统通常会在桌面上提供一个特殊区域,称为系统托盘或通知区域,长期运行的应用程序可以在该区域显示图标和简短消息。

例如下面所示。“红色爱心”为系统托盘的显示,右侧冒泡消息可以通过:showMessage()来进行显示。

image-20251129185421388

要检测用户桌面上是否存在系统托盘,请调用 QSystemTrayIcon::isSystemTrayAvailable() 静态函数。

要添加系统托盘项,需创建 QSystemTrayIcon 对象,调用 setContextMenu() 为图标提供上下文菜单,然后调用 show() 使其在系统托盘中可见。随时可使用 showMessage() 显示状态通知消息("气泡消息")。

若在构造系统托盘图标时系统托盘不可用,但后续变得可用,只要图标处于可见状态,QSystemTrayIcon 将自动在系统托盘中添加应用程序项。

当用户激活图标时,会触发 activated() 信号。

系统托盘在桌面应用程序中扮演着至关重要的角色,其主要作用可以归纳为以下几个核心方面:

  1. 后台持续运行;
  2. 即使状态显示:例如网络连接断开,连接成功,下载完成等状态的提示。
  3. 非打扰式通知:通过气泡消息传递信息,在桌面右下角以冒泡形式存在,不强制打断用户当前操作流程。
  4. 快速功能访问:提供快捷的快捷菜单显示。

使用案例(Qt官方案例)

创建系统托盘和菜单

void SystayDemo::initSystayIcon()
{m_systemIco = new QSystemTrayIcon(this);m_systemIco->setIcon(QIcon(":/images/heart.png"));setWindowIcon(QIcon(":/images/heart.png"));m_systemIco->setToolTip("Hello, World");QMenu* trayIconMenu = new QMenu(this);trayIconMenu->addAction(minimizeAction);trayIconMenu->addAction(maximizeAction);trayIconMenu->addAction(restoreAction);trayIconMenu->addSeparator();trayIconMenu->addAction(quitAction);m_systemIco->show();m_systemIco->setContextMenu(trayIconMenu);// 右下角以冒泡消息框显示, 默认10s后自动消失m_systemIco->showMessage("title",  "msg");connect(m_systemIco, &QSystemTrayIcon::activated, this, &SystayDemo::iconActivated);
}

绑定菜单动作

void SystayDemo::iconActivated(QSystemTrayIcon::ActivationReason reason)
{// 对于系统托盘的操作响应方式switch (reason) {case QSystemTrayIcon::Trigger:case QSystemTrayIcon::DoubleClick:qApp->postEvent(qApp, new EventHeader("Hello, CustomMsg"));showNormal();break;// 测试逻辑case QSystemTrayIcon::MiddleClick:m_systemIco->showMessage("下载完成",                      "文件 'project.zip' 已下载完成",  QSystemTrayIcon::Information,  3000                            );break;default:;}
}

需要注意的是,关闭主窗口时,需要判断是直接退出程序,还是最小化。

// 判断系统是否支持系统托盘
if (!QSystemTrayIcon::isSystemTrayAvailable()) 
{QMessageBox::critical(nullptr, QObject::tr("Systray"),QObject::tr("I couldn't detect any system tray ""on this system."));return 1;
}// 判断最后一个窗口关闭时,是否终止程序。
// Qt默认,当最后一个window关闭时, 会退出程序。无论是QWidget w, 还是new QWidget
QApplication::setQuitOnLastWindowClosed(false);// 如果不进行设置,也可以通过下面函数来实现
void closeEvent(QCloseEvent *event) override 
{qDebug() << "用户点击了关闭按钮";// 隐藏窗口而不是关闭hide();// 显示托盘消息提示if (trayIcon && trayIcon->isVisible()) {trayIcon->showMessage("应用程序", "程序已最小化到系统托盘\n右键点击图标显示菜单",QSystemTrayIcon::Information, 2000);}event->ignore();  // 重要:忽略关闭事件,不退出应用
}

设置应用和可执行图标

window下面的QtCreator下进行配置。

# 设置应用程序图标(Windows),图标和当前pro在同一目录。
RC_ICONS = Hakuon.ico

设置后,将会影响窗口的图标,任务栏图标,生成的可执行图标。

如果设置了系统托盘,系统托盘的图标不会受到上面图标设置的影响。

同样的,如果给窗口设置了下面,将会影响应用程序的图标和任务栏图标。

w->setWindowIcon(QIcon("xx"));
QApplication::setWindowIcon(QIcon("xx"))

但是不会改变可执行程序生成的图标。

屏幕截图 2025-11-29 201124

http://www.zskr.cn/news/65500.html

相关文章:

  • 2025-11-29
  • 【论术】: 响应式布局——flex:1与calc的区别
  • Day6-20251129
  • #20232408 2025-2026-1 《网络与系统攻防技术》实验七实验报告 - 20232408
  • 百科代做公司推荐,2025年12月权威发布百度百科/快懂百科代做公司信息
  • 2025 年衢州摄影培训人像摄影培训哪家好——路人贾摄影讲堂(衢州分公司)排名第一
  • 2025 年台州摄影培训人像摄影培训推荐榜:路人贾摄影讲堂(台州分公司)实战教学、行业十杰创办
  • 敏捷冲刺随笔-3
  • 从组合爆炸到优雅分派:复杂策略系统的工程化构建
  • 实用指南:RAM和ROM的定义和区别总结!!!
  • 2025 年湖州摄影培训人像摄影培训哪家好——路人贾摄影讲堂(湖州分公司)排名第一
  • 2025 年宁波摄影培训人像摄影培训哪家好——路人贾摄影讲堂(宁波分公司)排名第一
  • Mac对于网络空间安全专业适用性踩坑点
  • 完整教程:[RabbitMQ] 最新版本深度解析:4.0+ 新特性、性能飞跃与生产实践(2025 年更新)
  • [NOIP2025] 糖果店 / candy 题解
  • Rikkahub+硅基流动API-key实现移动端Android-AI女友项目
  • 某中心与高校拓展机器人技术学术合作
  • 【图像卷积基础】卷积过程卷积实现通道扩充与压缩池化Pooling原理和可视化 - 详解
  • 2024csp-s游记
  • 如何选择好的 GEO 服务商?2025年12月优质 GEO 服务商推荐
  • db link
  • 2025年六角管片螺栓,螺纹管片螺栓,热镀锌管片螺栓厂家推荐:综合实力与工程适配性测评
  • 2025年高铁T型螺栓,铝型材T型螺栓,管廊T型螺栓厂家推荐:安装便捷性与兼容性测评
  • 2025年欧标T型螺栓,地铁专用T型螺栓,高铁T型螺栓品牌榜:资质认证与工程适配解析
  • 113.Java深入学习之JVM一
  • 2025年工业脚轮,设备脚轮,轻型脚轮厂家推荐:聚焦安装适配性,全场景选型攻略
  • 2025年静音脚轮,设备脚轮,周转车脚轮厂家推荐:核心性能解析,适配场景全攻略
  • 复杂业务逻辑的数据筛选:多维表格条件嵌套能力的技术解析
  • 2025年减震脚轮,设备脚轮,工业脚轮厂家推荐榜:聚焦承重静音,品质红榜盘点
  • 2025 年加工厂家最新推荐,车铣复合、精密细长轴、进口津上机、精密零部件、机械零件非标定制加工,技术实力与市场口碑深度解析