设置成关闭软件但又不关闭后台服务
一、在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、托盘图片