采用QSystemTrayIcon实现系统托盘功能

在应用程序关闭的时候最小化到系统托盘,想必大家都见过这个功能。如何用QSystemTrayIcon实现系统托盘功能呢?QT的源码里面有详细的例子,但是代码比较繁琐。我根据自己的经验将主要实现过程作简化介绍如下。

第一步创建QSystemTrayIcon

trayIcon = new QSystemTrayIcon(this);

第二步为QSystemTrayIcon添加右键菜单

minimizeAction = new QAction(tr("最小化"), this);
connect(minimizeAction, &QAction::triggered, this, &QWidget::hide);

maximizeAction = new QAction(tr("最大化"), this);
connect(maximizeAction, &QAction::triggered, this, &QWidget::showMaximized);

restoreAction = new QAction(tr("恢复"), this);
connect(restoreAction, &QAction::triggered, this, &QWidget::showNormal);

quitAction = new QAction(tr("退出"), this);
connect(quitAction, &QAction::triggered, this, &frmMain::quit);

trayIconMenu = new QMenu(this);
trayIconMenu->addAction(minimizeAction);
trayIconMenu->addAction(maximizeAction);
trayIconMenu->addAction(restoreAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(quitAction);

trayIcon->setContextMenu(trayIconMenu);

第三步显示系统托盘

QIcon icon(“main.png”);
trayIcon->setIcon(icon);
trayIcon->setToolTip(AppConfig::TitleCn);
trayIcon->show();

最关键的是第三步,必须保证图标文件能够找到,文件格式能够支持。不然,图标创建不成功的话,你是看不到系统托盘效果的。

后面的就是辅助功能了,设置关闭消息,设置激活功能等等。

void frmMain::closeEvent(QCloseEvent* e)
{
    if (trayIcon->isVisible())
    {
        QMessageBox::information(this, AppConfig::TitleCn, tr("程序将会在系统托盘中继续运行。要<b>关闭</b>程序请进入任务栏的系统托盘,并在弹出的菜单中选择<b>退出</b>按钮!"));
        hide();
        e->ignore();
    }
}

void frmMain::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
    switch (reason)
    {
    case QSystemTrayIcon::Trigger:
    case QSystemTrayIcon::DoubleClick:
        showNormal();
        break;
    default:
        break;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值