Qt应用程序实现最小化系统托盘

原文地址

原文链接

前言

系统应用程序经常需要保持在后台工作,这里我们简单展示下Qt开发下系统托盘的实现

实现

核心代码就一行,在main.cpp写入,即可保证在关闭时保留系统进程

QApplication::setQuitOnLastWindowClosed(false);

这里展示系统托盘的示例,可以根据需求增减代码

//h
class AdminWidget : public QWidget
{
    Q_OBJECT
public:
    AdminWidget(QWidget* parent = nullptr);
    ~AdminWidget() override;
//...

private:
    void initSysTrayIcon();
    void initAppMenu();
    //...

private:
    //...
    QSystemTrayIcon* m_sysTrayIcon;
    QMenu*           m_menu;
    QAction*         m_showMainAction;
    QAction*         m_exitAppAction;
    //...

private:
    void systemIconActivatedEvent(QSystemTrayIcon::ActivationReason reason);
    void showAppMainEvent();
    void exitAppEvent();
//...
};
//.cpp
AdminWidget::AdminWidget(QWidget* parent) : QWidget(parent)
{
    //...
    setWindowIcon(QIcon(K_ADMIN_ICON_PATH));
    setWindowTitle(K_ADMIN_APP_NAME);
    initSysTrayIcon();
    //..
}

AdminWidget::~AdminWidget()
{
    //...
}

//...

void AdminWidget::initSysTrayIcon()
{
    m_sysTrayIcon = new QSystemTrayIcon(this);
    // base
    {
        m_sysTrayIcon->setVisible(true);
        m_sysTrayIcon->setIcon(QIcon(K_ADMIN_ICON_PATH));
        m_sysTrayIcon->showMessage(K_ADMIN_APP_NAME, "工具箱已启动");
        m_sysTrayIcon->setToolTip(K_ADMIN_APP_NAME);
    }
    // left click
    connect(m_sysTrayIcon, &QSystemTrayIcon::activated, this, &AdminWidget::systemIconActivatedEvent);
    // right click
    initAppMenu();
    // show
    m_sysTrayIcon->show();
}

void AdminWidget::initAppMenu()
{
    // action
    m_showMainAction = new QAction("主界面");
    connect(m_showMainAction, &QAction::triggered, this, &AdminWidget::showAppMainEvent);
    m_exitAppAction = new QAction("退出");
    connect(m_exitAppAction, &QAction::triggered, this, &AdminWidget::exitAppEvent);
    // menu
    m_menu = new QMenu();
    m_menu->addAction(m_showMainAction);
    m_menu->addSeparator();
    m_menu->addAction(m_exitAppAction);
    m_sysTrayIcon->setContextMenu(m_menu);
}

void AdminWidget::systemIconActivatedEvent(QSystemTrayIcon::ActivationReason reason)
{
    if (QSystemTrayIcon::Trigger == reason || QSystemTrayIcon::DoubleClick == reason)
    {
        this->show();
    }
}

void AdminWidget::showAppMainEvent()
{
    this->show();
}

void AdminWidget::exitAppEvent()
{
    QApplication::exit();
}
//...

原文地址

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值