Skip to content

给qt程序添加任务栏托盘

参考文档

引入头文件

cpp
#include <QSystemTrayIcon>

判断系统托盘是否支持,支持则进行设置

cpp
// 判断是否支持系统托盘图标
if(QSystemTrayIcon::isSystemTrayAvailable()){
    // 设置当窗口关闭时不退出程序
    QApplication::setQuitOnLastWindowClosed(false);

    // 定义托盘图标,并设置父控件为mainwindow
    QSystemTrayIcon *icon = new QSystemTrayIcon(this);

    // 挑一个顺眼的icon,路径从qrc中复制即可
    icon->setIcon(QIcon(":/img/systemTrayIcon.webp"));

    // 添加右键菜单
    QMenu *menu = new QMenu;
    QAction *normal, *min, *max, *quit;
    normal = new QAction("显示主界面");
    connect(normal, &QAction::triggered, [&](){
        showNormal();
    });
    min = new QAction("最小化");
    connect(min, &QAction::triggered, [&](){
        showMinimized();
    });
    max = new QAction("最大化");
    connect(max, &QAction::triggered, [&](){
        showMaximized();
    });
    quit = new QAction("退出");
    connect(quit, &QAction::triggered, [&](){
        QCoreApplication::quit();
    });

    menu->addAction(normal);
    menu->addAction(min);
    menu->addAction(max);
    menu->addSeparator();
    menu->addAction(quit);

    icon->setContextMenu(menu);

    // 设置单击显示主界面
    connect(icon, &QSystemTrayIcon::activated, [=](QSystemTrayIcon::ActivationReason r){
        if(r == QSystemTrayIcon::ActivationReason::Trigger) emit normal->triggered();
    });

    // 显示托盘图标
    icon->show();
}