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("托盘显示内容"));
相关推荐
独泪了无痕5 小时前
探索Pinyin4j-Java中的拼音转换利器
java·后端
道尔柯南7 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
Nturmoils7 小时前
集中式与分布式怎么选:从订单读写看 KingbaseES 的架构边界
数据库
xiaomuzuirenzhen7 小时前
大专电子商务从事电商运营分析师需要考证吗?
大数据·数据库
kingx38 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
翔云12345610 小时前
RocksDB中,客户端每写入一次数据,需要访问几次磁盘
运维·数据库·mysql
DevOpenClub10 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
露天赏雪11 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
天天被压力11 小时前
【A股分钟级高频数据完全手册 #06】北交所分钟级数据接口:京市股票Pro版最新分时
java·人工智能·python
GeW11 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux·数据库