// LATEST

Qt如何给程序添加系统托盘

介绍一下如何给Qt程序做一个系统托盘

简单介绍

image20241119194056367

开始制作

添加托盘

使用到了QSystemTrayIcon类,首先要在.h的private中创建一个:

QSystemTrayIcon *m_sysTrayIcon; //系统托盘

然后在cpp中实现

m_sysTrayIcon = new QSystemTrayIcon(this); //新建QSystemTrayIcon对象
QIcon icon = QIcon(":/img/img/logo.png"); //资源文件添加的图标
m_sysTrayIcon->setIcon(icon);

这里设置图标要检查一下,如果设置失败的话不会报错,也不会显示托盘

接着,就可以给托盘图标添加事件了

connect(m_sysTrayIcon, &QSystemTrayIcon::activated, //给QSystemTrayIcon添加槽函数
        [=](QSystemTrayIcon::ActivationReason reason)
        {
            switch(reason)
            {
            case QSystemTrayIcon::Trigger: //单击托盘图标
                //单击事件
                break;
            case QSystemTrayIcon::DoubleClick: //双击托盘图标
                //双击事件
                break;
            default:
                break;
            }
        });

添加托盘菜单

也就是右击托盘图标会显示的菜单,使用到了QMenu,先.h中创建:

QMenu *m_menu; //菜单

然后再cpp中实现

m_menu = new QMenu(this);
m_sysTrayIcon->setContextMenu(m_menu); //把QMenu赋给QSystemTrayIcon对象

添加菜单项

我们有了菜单,但是菜单里没东西是不行的,使用QAction来添加动作,这里做一个显示主界面和退出程序的示例。

还是一样.h中添加:

QAction *m_showMainAction; //显示主界面
QAction *m_exitAppAction; //退出程序

然后在上面的QMenu赋值到Icon前,加入

m_showMainAction = new QAction("主界面", this);
m_exitAppAction = new QAction("退出", this);
m_menu->addAction(m_showMainAction); //新增菜单项---显示主界面
m_menu->addAction(m_exitAppAction); //新增菜单项---退出程序

当然我们有了按钮还不行,还要给按钮添加事件

private slots中添加:

void on_showMainAction(); //打开主界面
void on_exitAppAction(); //退出程序

记得实现

//托盘主界面
void MainWindow::on_showMainAction()
{
    this->show();
}
//托盘推出
void MainWindow::on_exitAppAction()
{
    qApp->exit();
}

当然,还要连接一下信号和槽

connect(m_showMainAction,SIGNAL(triggered()),this,SLOT(on_showMainAction()));
connect(m_exitAppAction,SIGNAL(triggered()),this,SLOT(on_exitAppAction()));

还没有评论

欢迎留下你的观点,保持交流的清晰和友好。