Qt 利用内置图标实现系统托盘

效果

 

复制可用,代码如下

bool Widget::createTray()
{
    if(!QSystemTrayIcon::isSystemTrayAvailable()){
        return false;
    }
    m_tray = new QSystemTrayIcon(this);
    m_tray->setIcon(style()->standardIcon(QStyle::SP_TitleBarMenuButton));
    m_tray->setToolTip("托盘测试");
    m_tray->setVisible(true);

    connect(m_tray,&QSystemTrayIcon::activated,[=](QSystemTrayIcon::ActivationReason reason){
        if(reason == QSystemTrayIcon::Trigger){
            if(QSystemTrayIcon::supportsMessages())
                m_tray->showMessage("Qt","学习使我进步",
                                    style()->standardIcon(QStyle::SP_TitleBarMenuButton),2000);
        }
        if(reason == QSystemTrayIcon::DoubleClick){
            this->showNormal();
        }
    });

    m_menu = new QMenu();

    QAction * act_desk = new QAction("桌面",this);
    act_desk->setIcon(style()->standardIcon(QStyle::SP_DesktopIcon));

    QAction * act_info = new QAction("信息",this);
    act_info->setIcon(style()->standardIcon(QStyle::SP_MessageBoxInformation));

    QAction * act_warning = new QAction("警告",this);
    act_warning->setIcon(style()->standardIcon(QStyle::SP_MessageBoxWarning));

    QAction * act_critical = new QAction("Critical",this);
    act_critical->setIcon(style()->standardIcon(QStyle::SP_MessageBoxCritical));

    QAction * act_vistashield = new QAction("护盾",this);
    act_vistashield->setIcon(style()->standardIcon(QStyle::SP_VistaShield));

    QAction * act_volume = new QAction("音量",this);
    act_volume->setIcon(style()->standardIcon(QStyle::SP_MediaVolume));

    QAction * act_refresh = new QAction("刷新",this);
    act_refresh->setIcon(style()->standardIcon(QStyle::SP_BrowserReload));

    QAction * act_show = new QAction("显示",this);
    act_show->setIcon(style()->standardIcon(QStyle::SP_ComputerIcon));

    QAction * act_quit = new QAction("退出",this);
    act_quit->setIcon(style()->standardIcon(QStyle::SP_BrowserStop));

    m_menu->addAction(act_desk);
    m_menu->addAction(act_info);
    m_menu->addSeparator();
    m_menu->addAction(act_warning);
    m_menu->addAction(act_critical);
    m_menu->addAction(act_vistashield);
    m_menu->addSeparator();
    m_menu->addAction(act_volume);
    m_menu->addAction(act_refresh);
    m_menu->addAction(act_show);
    m_menu->addAction(act_quit);

    connect(act_show,&QAction::triggered,[=]{
        this->showNormal();
    });

    connect(act_quit,&QAction::triggered,[=]{
        this->close();
    });
    m_tray->setContextMenu(m_menu);
    return true;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值