您现在的位置是:首页 >
企业资讯
一块钱10万名片赞 - 快手一元一百个赞微信支付_最低代刷平台
时间:2024-05-14 12:29
评论
Qt系统托盘程序的创建一般来说,我们的应用程序都是控制台程序,或者窗口程序,点击应用程序右上角的关闭按钮,就会将程序关闭。但是有些应用,例如微信、或者杀毒软件等等,点击关闭按钮后,只是将程序最小化到右下角的菜单栏而已,并没有关闭程序。那么,这种托盘程序,在QT是怎么实现的呢?Qt中,通过类QSystemTrayIcon,实现系统托盘,右键菜单的实现,通过QMenu和QAction实现。...
自助下单地址(拼多多砍价,ks/qq/dy赞等业务):点我进入
一般来说,我们的应用程序都是控制台程序或窗口程序。 单击应用程序右上角的关闭按钮以关闭程序。 但是有些应用,比如微信,或者杀毒软件等,点击关闭按钮后qt 托盘程序,只是将程序最小化到右下角的菜单栏,并没有关闭程序。 要彻底关闭程序,需要点击右下角相应程序的右键菜单退出。
那么qt 托盘程序,这种托盘程序在QT中是如何实现的呢?
在Qt中,通过类QSystemTrayIcon,通过QMenu和QAction实现系统托盘和右键菜单。文章源地址
直接上代码
sysTrayIconWidget.h
#ifndef SYSTRAYICONWIDGET_H
#define SYSTRAYICONWIDGET_H
#include
#include
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class SysTrayIconWidget; }
QT_END_NAMESPACE
class SysTrayIconWidget : public QWidget
{
Q_OBJECT
public:
SysTrayIconWidget(QWidget *parent = nullptr);
~SysTrayIconWidget() override;
private:
Ui::SysTrayIconWidget *ui;
QSystemTrayIcon *m_sysTrayIcon; //系统托盘
void initSysTrayIcon();
QMenu *m_menu; //菜单
QAction *m_showMainAction; //动作
QAction *m_exitAppAction; //动作
void createActions();
void createMenu();
private slots:
void on_showMainAction();
void on_exitAppAction();
protected:
void closeEvent (QCloseEvent *event) override;
};
#endif // SYSTRAYICONWIDGET_H
sysTrayIconWidget.cpp
#include "sysTrayIconWidget.h"
#include "ui_sysTrayIconWidget.h"
#include
SysTrayIconWidget::SysTrayIconWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::SysTrayIconWidget)
{
ui->setupUi(this);
initSysTrayIcon();
}
SysTrayIconWidget::~SysTrayIconWidget()
{
delete ui;
}
//创建系统托盘
void SysTrayIconWidget::initSysTrayIcon()
{
//隐藏程序主窗口
this->hide();
//新建QSystemTrayIcon对象
m_sysTrayIcon = new QSystemTrayIcon(this);
//设置托盘图标
QIcon icon = QIcon(":/images/testIcon.png"); //资源文件添加的图标
m_sysTrayIcon->setIcon(icon);
//当鼠标移动到托盘上的图标时,会显示此处设置的内容
m_sysTrayIcon->setToolTip("托盘提示信息");
//给QSystemTrayIcon添加槽函数
connect(m_sysTrayIcon, &QSystemTrayIcon::activated,
[=](QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
case QSystemTrayIcon::Trigger:
//单击托盘图标
m_sysTrayIcon->showMessage(QObject::trUtf8("Message Title"),
QObject::trUtf8("欢迎使用此程序"),
QSystemTrayIcon::Information,
1000);
break;
case QSystemTrayIcon::DoubleClick:
//双击托盘图标
//双击后显示主程序窗口
this->show();
break;
default:
break;
}
});
//建立托盘操作的菜单
createActions();
createMenu();
//在系统托盘显示此对象
m_sysTrayIcon->show();
}
//创建动作
void SysTrayIconWidget::createActions()
{
m_showMainAction = new QAction("关于系统", this);
connect(m_showMainAction,SIGNAL(triggered()),this,SLOT(on_showMainAction()));
m_exitAppAction = new QAction("退出", this);
connect(m_exitAppAction,SIGNAL(triggered()),this,SLOT(on_exitAppAction()));
}
//创建托盘菜单
void SysTrayIconWidget::createMenu()
{
m_menu = new QMenu(this);
//新增菜单项---显示主界面
m_menu->addAction(m_showMainAction);
//增加分隔符
m_menu->addSeparator();
//新增菜单项---退出程序
m_menu->addAction(m_exitAppAction);
//把QMenu赋给QSystemTrayIcon对象
m_sysTrayIcon->setContextMenu(m_menu);
}
//当在系统托盘点击菜单内的显示主界面操作
void SysTrayIconWidget::on_showMainAction()
{
QApplication::setQuitOnLastWindowClosed( false );
QMessageBox::information(nullptr, "xxxx", "xxxx有限公司copyright©2022");
}
//当在系统托盘点击菜单内的退出程序操作
void SysTrayIconWidget::on_exitAppAction()
{
qApp->exit();
}
//关闭事件
void SysTrayIconWidget::closeEvent(QCloseEvent *event)
{
//忽略窗口关闭事件
QApplication::setQuitOnLastWindowClosed( true );
this->hide();
event->ignore();
}
需要注意的是,一定要忽略closeEvent()中的关闭窗口close事件,否则点击右上角的关闭按钮后,程序还是会退出。
![在此处插入图片描述](