尚经起名网

您现在的位置是:首页 >

企业资讯

一块钱10万名片赞 - 快手一元一百个赞微信支付_最低代刷平台

时间:2024-05-14 12:29 评论
Qt系统托盘程序的创建一般来说,我们的应用程序都是控制台程序,或者窗口程序,点击应用程序右上角的关闭按钮,就会将程序关闭。但是有些应用,例如微信、或者杀毒软件等等,点击关闭按钮后,只是将程序最小化到右下角的菜单栏而已,并没有关闭程序。那么,这种托盘程序,在QT是怎么实现的呢?Qt中,通过类QSystemTrayIcon,实现系统托盘,右键菜单的实现,通过QMenu和QAction实现。...

自助下单地址(拼多多砍价,ks/qq/dy赞等业务):点我进入

Qt系统托盘程序的创建

一般来说,我们的应用程序都是控制台程序或窗口程序。 单击应用程序右上角的关闭按钮以关闭程序。 但是有些应用,比如微信,或者杀毒软件等,点击关闭按钮后qt 托盘程序,只是将程序最小化到右下角的菜单栏,并没有关闭程序。 要彻底关闭程序,需要点击右下角相应程序的右键菜单退出。

那么qt 托盘程序,这种托盘程序在QT中是如何实现的呢?

在Qt中,通过类QSystemTrayIcon,通过QMenu和QAction实现系统托盘和右键菜单。文章源地址

直接上代码

qt 托盘程序_qt程序 驱动器未就绪_qt 托盘程序

sysTrayIconWidget.h

qt程序 驱动器未就绪_qt 托盘程序_qt 托盘程序

#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

qt 托盘程序_qt 托盘程序_qt程序 驱动器未就绪

#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事件,否则点击右上角的关闭按钮后,程序还是会退出。

qt 托盘程序_qt 托盘程序_qt程序 驱动器未就绪

![在此处插入图片描述](