Qt系统托盘程序的实现

这篇具有很好参考价值的文章主要介绍了Qt系统托盘程序的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt系统托盘程序的创建

一般来说,我们的应用程序都是控制台程序,或者窗口程序,点击应用程序右上角的关闭按钮,就会将程序关闭。但是有些应用,例如微信、或者杀毒软件等等,点击关闭按钮后,只是将程序最小化到右下角的菜单栏而已,并没有关闭程序。而要彻底关闭程序,需要点击右下角对应程序的右键菜单,进行退出。
那么,这种托盘程序,在QT是怎么实现的呢?
Qt中,通过类QSystemTrayIcon,实现系统托盘,右键菜单的实现,通过QMenuQAction实现。

直接上代码
Qt系统托盘程序的实现
sysTrayIconWidget.h

#ifndef SYSTRAYICONWIDGET_H
#define SYSTRAYICONWIDGET_H

#include <QWidget>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QCloseEvent>

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 <QMessageBox>

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

Qt系统托盘程序的实现Qt系统托盘程序的实现

Qt系统托盘程序的实现文章来源地址https://www.toymoban.com/news/detail-400478.html

到了这里,关于Qt系统托盘程序的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter桌面应用程序定义系统托盘Tray

    系统托盘 :系统托盘是一种用户界面元素,通常出现在操作系统的任务栏或桌面顶部。它是一个水平的狭长区域,用于显示各种图标和通知,以提供快速访问和操作特定应用程序或系统功能。系统托盘通常包含操作系统或第三方应用程序的图标,这些图标可以显示有关应用程

    2024年02月04日
    浏览(54)
  • go 使用systray 实现托盘和程序退出

    1.先 go get 安装 包 2.使用的代码

    2024年02月10日
    浏览(32)
  • C# 实现winform软件最小化到系统托盘,开机自启动

      问题描述   用户的电脑是win7系统,应用系统在用户电脑上运行时部分功能需要访问注册表,但是使用这些功能时会提示用户没有权限访问注册表。 原因分析   win7及后续高版本系统对用户的权限控制比较严,就算用户的权限较高,但用户启动程序时默认还是以普通用

    2024年02月03日
    浏览(45)
  • Qt 自定义菜单 托盘菜单

    托盘菜单实现:通过QSystemTrayIcon+QMenu+QAction即可完美实现! 实现方式:createActions用于创建菜单、菜单项,translateActions用于设置文本、实现多语化,translateAccount用于设置用户空间配额。  

    2024年02月11日
    浏览(31)
  • Qt之QSystemTrayIcon(托盘图标)的使用(含源码+注释)

    下方为消息通知操作,可能是因为录屏原因导致消息弹窗未弹出(无图标通知也会带icon,考虑是windows的原因)。 正常消息提示如下: 下方对托盘图标进行了基本的鼠标操作,值得一提的是,双击之前会先触发单击操作。 要做闪烁操作时,需要更新图标, 且我在测试时,更

    2023年04月16日
    浏览(37)
  • 从0到1,手把手带你开发截图工具ScreenCap------003实现最小化程序到托盘运行

    为了方便截图干净,实现最小化程序到托盘运行,简洁,勿扰 实现最小化程序到托盘运行 实现托盘菜单功能 实现回显主窗体 实现托盘开始截屏 实现气泡信息提示 实现托盘程序提示 实现托盘退出程序 封装完好,可复用 注:博主所有资源永久免费,若有帮助,请点赞转发是

    2024年02月05日
    浏览(53)
  • MFC:程序的托盘显示

    关键技术,API函数 Shell_NotifyIcon ,具体查看msdn吧 https://www.cnblogs.com/htj10/p/11688347.html

    2024年02月07日
    浏览(36)
  • Qt Creator 创建 Qt 默认窗口程序

    Qt 入门实战教程(目录) Windows Qt 5.12.10下载与安装 本文介绍用Qt自带的集成开发工具Qt Creator创建Qt默认的窗口程序。 本文不需要你另外安装Visual Studio 2022这样的集成开发环境,也不需要你再在Visual Studio 2022中安装Qt VS Tools这样的插件。 目的就是为了能够让你可以更快的把Q

    2024年02月09日
    浏览(50)
  • Qt实现遮罩窗口系统全屏锁定或应用程序界面锁定

    qmaskdialog.h qmaskdialog.cpp showFullScreen:全屏遮罩 showMaximized:除任务栏外,全屏 qhook.h qhook.cpp 若仅为应用程序主界面,则设置父窗口,并调用以下函数,盖住主界面 若要遮罩窗口跟随主界面自动拉伸,需重写主界面(MainWindow)的ResizeEvent,如果为全屏遮罩,则不需要, 目前的效果是

    2024年01月23日
    浏览(62)
  • wpf增加系统托盘图标

    使用系统托盘,可以为用户提供一个简便快捷的操作习惯。 wpf中增加系统托盘图标有2种 第一种,使用Hardcodet.NotifyIcon.Wpf开源组件 1.建立一个wpf程序 2.安装Hardcodet.NotifyIcon.Wpf 3.增加图片 图片选择资源,否则获取不到路径 4.界面前台代码 其中此处可以重写MenuItem的样式,以及其

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包