Qt 自定义菜单 托盘菜单

托盘菜单实现:通过QSystemTrayIcon+QMenu+QAction即可完美实现!

实现方式:createActions用于创建菜单、菜单项,translateActions用于设置文本、实现多语化,translateAccount用于设置用户空间配额。

cpp 复制代码
void TrayMenu::createActions()
{
    help_menu = new QMenu();

    //创建菜单项
    action_show = new QAction(this);
    action_quit = new QAction(this);
    action_login_home = new QAction(this);
    action_account = new QAction(this);
    action_user_space = new QAction(this);
    action_help = new QAction(this);
    action_about = new QAction(this);
    action_check_update = new QAction(this);
    action_setting = new QAction(this);

   help_menu->setIcon(QIcon(":/icon/help"));
   action_show->setIcon(QIcon(":/icon/open"));
   action_login_home->setIcon(QIcon(":/icon/home"));
   action_account->setIcon(QIcon(":/icon/user"));
   action_help->setIcon(QIcon(":/icon/help"));
   action_about->setIcon(QIcon(":/icon/about"));
   action_check_update->setIcon(QIcon(":/icon/update"));
   action_setting->setIcon(QIcon(":/icon/set"));
   action_quit->setIcon(QIcon(":/icon/quit"));

    //添加菜单项
   help_menu->addAction(action_about);
   help_menu->addAction(action_help);
   help_menu->addAction(action_check_update);
   this->addAction(action_show);
   this->addAction(action_login_home);
   this->addSeparator();
   this->addAction(action_account);
   this->addAction(action_user_space);
   this->addSeparator();
   this->addAction(action_setting);
   this->addMenu(help_menu);
   this->addAction(action_quit);

    //设置信号连接
    connect(action_show, SIGNAL(triggered(bool)), this, SIGNAL(showWidget()));
    connect(action_quit, SIGNAL(triggered(bool)), this, SIGNAL(logoutWidget()));
    connect(action_setting, SIGNAL(triggered(bool)), this, SIGNAL(setUp()));
    connect(action_about, SIGNAL(triggered(bool)), this, SIGNAL(aboutUs()));
    connect(action_login_home, SIGNAL(triggered(bool)), MenuAction::getInstance(), SLOT(openLoginHome()));
    connect(action_help, SIGNAL(triggered(bool)), MenuAction::getInstance(), SLOT(openHelpMe()));
    QObject::connect(action_check_update, SIGNAL(triggered(bool)), MenuAction::getInstance(), SLOT(openCheckUpdate()));
}

void TrayMenu::translateActions()
{
   help_menu->setTitle(tr("help"));
   action_show->setText(tr("open"));
   action_quit->setText(tr("quit"));
   action_login_home->setText(tr("login home"));
   this->translateAccount();
   action_help->setText(tr("instruction"));
   action_about->setText(tr("about us"));
   action_check_update->setText(tr("check update"));
   action_setting->setText(tr("setting"));
}

void TrayMenu::translateAccount()
{
   action_user_space->setText(tr("use:") + use_space + QString("  ") + tr("total:") + total_space);
}

   托盘菜单项建立完成之后,在建立自己的托盘,包括:托盘图标、托盘提示信息等。
QSystemTrayIcon *system_tray = new QSystemTrayIcon();

//放在托盘提示信息、托盘图标
system_tray ->setToolTip(QString("我就是托盘"));
system_tray ->setIcon(QIcon(":/icon/login"));

TrayMenu *tray_menu = new TrayMenu();
system_tray->setContextMenu(tray_menu);

//点击托盘执行的事件
connect(system_tray , SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));
    connect(tray_menu, SIGNAL(showWidget()), this, SLOT(showNormal()));

//显示托盘
system_tray->show();

//托盘显示提示信息
system_tray->showMessage(QString("托盘标题"), QString("托盘显示内容"));
相关推荐
带刺的坐椅14 小时前
MCP 进化:让静态 Tool 进化为具备“上下文感知”的远程 Skills
java·ai·llm·agent·solon·mcp·tool-call·skills
java1234_小锋14 小时前
Java线程之间是如何通信的?
java·开发语言
张张努力变强14 小时前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
while(1){yan}15 小时前
Spring事务
java·数据库·spring boot·后端·java-ee·mybatis
盛世宏博北京15 小时前
高效环境管控:楼宇机房以太网温湿度精准监测系统方案
开发语言·数据库·php·以太网温湿度变送器
毕设源码-赖学姐15 小时前
【开题答辩全过程】以 高校社团管理平台为例,包含答辩的问题和答案
java
运维行者_15 小时前
2026 技术升级,OpManager 新增 AI 网络拓扑与带宽预测功能
运维·网络·数据库·人工智能·安全·web安全·自动化
gfdhy15 小时前
【C++实战】多态版商品库存管理系统:从设计到实现,吃透面向对象核心
开发语言·数据库·c++·microsoft·毕业设计·毕设
Elastic 中国社区官方博客15 小时前
Elasticsearch:上下文工程 vs. 提示词工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
余瑜鱼鱼鱼16 小时前
线程和进程的区别和联系
java·开发语言·jvm