QT软件在关闭时缩小到系统托盘

版权声明:欢迎大佬们指点 https://blog.csdn.net/bloke_come/article/details/81136526

设置成关闭软件但又不关闭后台服务
一、在main函数中设置后台不关闭服务

QApplication a(argc, argv);
a.setOrganizationName("Qtrac Ltd.");                // 设置组织名
a.setOrganizationDomain("qtrac.eu");                // 设置组织域名
a.setQuitOnLastWindowClosed(false);                 // 退出程序后服务不终止

二、设置系统托盘

1、在关闭时成系统托盘状态
首先添加关闭事件

void closeEvent(QCloseEvent *event);                    // 关闭系统事件

2、在关闭函数中添加

m_SystemTrayIcon = new QSystemTrayIcon();
m_SystemTrayIcon->setIcon(QIcon("C:\\Users\\WingThinks-LiKun\\Desktop\\0b46c9ccd624f0ad4f2c3df3b8e3bf4d.png"));     // 托盘时显示的图片
m_SystemTrayIcon->setToolTip(QString::fromLocal8Bit("测试系统托盘图标"));                                             // 鼠标在托盘图片时的提示
//给QSystemTrayIcon添加槽函数
connect(m_SystemTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason)));
//建立托盘操作的菜单
CreatAction();  
CreatMenu();
m_SystemTrayIcon->show();   // 显示图片图标

3、如何还原关闭状态

//添加槽函数
void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
//槽函数中添加
void **::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
{
    switch (reason) 
    {
    case QSystemTrayIcon::Trigger:
        //单击托盘图标
        /*m_SystemTrayIcon->showMessage(QString::fromLocal8Bit("Message Title"),
                                      QString::fromLocal8Bit("欢迎使用此程序"),
                                      QSystemTrayIcon::Information,
                                      1000);*/
        break;
    case QSystemTrayIcon::DoubleClick:
        //双击托盘图标
        //双击后显示主程序窗口
        this->show();
        m_SystemTrayIcon->hide();
        break;
    default:
        break;
    }
}

4、添加托盘中的菜单

void **::CreatMenu()
{
    m_Menu = new QMenu(this);
    //新增菜单项---显示主界面
    m_Menu->addAction(m_QActionShowMain);
    //增加分隔符
    m_Menu->addSeparator();
    //新增菜单项---退出程序
    m_Menu->addAction(m_QActionExitApp);
    //把QMenu赋给QSystemTrayIcon对象
    m_SystemTrayIcon->setContextMenu(m_Menu);
}

5、添加托盘中的活动

void **::CreatAction()
{
    m_QActionShowMain = new QAction(QString::fromLocal8Bit("显示主界面"), this);
    connect(m_QActionShowMain, SIGNAL(triggered()), this, SLOT(slotActionMain()));

    m_QActionExitApp = new QAction(QString::fromLocal8Bit("退出"), this);
    connect(m_QActionExitApp, SIGNAL(triggered()), this, SLOT(slotActionExitApp()));

}

void **::slotActionMain()
{
    this->show();
    m_SystemTrayIcon->hide();
}

void **::slotActionExitApp()
{
    exit(0);
}

6、托盘图片
托盘图片

猜你喜欢

转载自blog.csdn.net/bloke_come/article/details/81136526