Qt 数据服务器、协议转换、系统托盘模块、CAN总线模块、反射内存卡模块

简介: 这个程序也不怎么复杂,就则一个界面,核心功能呢就是提供反射内存卡和CAN采集卡数据交互,其他的没有了。

简单介绍


image.png

今天主要是实现了这个程序启动以后最小化到系统托盘,在系统托盘的图标上面加上显示主界面选线和退出选项,如下图:

image.png

第一版本

首先需要包含的头文件:

#include <QSystemTrayIcon>  //操作系统托盘操作类
#include <QMenu>
#include <QAction>

需要定义的变量:

    QSystemTrayIcon *m_trayIcon = nullptr;   //系统托盘类
    QMenu *m_trayIconMenu = nullptr;         //系统托盘菜单
    QAction *m_showWindowAction = nullptr;
    QAction *m_exitAppAction = nullptr;

实现:

 /*
     * 设置系统托盘内容
     */
    m_trayIcon = new QSystemTrayIcon(this);
    m_trayIcon->setIcon(QIcon(":/Images/logo.ico"));
    m_trayIcon->setToolTip("DateServer");
    m_trayIcon->show();
    /*
     * 创建两个Action
     */
    m_showWindowAction = new QAction(QIcon(":/Images/logo.ico"),"显示界面",this);
    connect(m_showWindowAction,&QAction::triggered,this,[=](){
        this->show();
    });
    m_exitAppAction = new QAction(QIcon(":/Images/exit.ico"),"退出程序",this);
    connect(m_exitAppAction,&QAction::triggered,this,[=](){
        this->close();
    });
    /*
     * 创建菜单
     */
    m_trayIconMenu = new QMenu(this);
    m_trayIconMenu->addAction(m_showWindowAction);
    m_trayIconMenu->addSeparator();
    m_trayIconMenu->addAction(m_exitAppAction);
    m_trayIcon->setContextMenu(m_trayIconMenu);
    connect(m_trayIcon,&QSystemTrayIcon::activated,this,[=](QSystemTrayIcon::ActivationReason temp){
        switch (temp) {
        case QSystemTrayIcon::Trigger:
        {
            //单击图标时间
            break;
        }
        case QSystemTrayIcon::DoubleClick:
        {
            if(this->isHidden())
            {
                this->show();
            }
            else
            {
                this->hide();
            }
            break;
        }
        }
    });


这么写是没有问题的,功能全部可以实现,但是你,这样写现实我没有水平呀,所有内容都放在了构造函数里面,显得我的构造函数有点太长了,在加上我的这智商,只有一个函数不能同时现实出来,那就理解有困难呀,所以,还是给他们分分家比较好。

第二版本:

头文件新增内容:

    void initMySystemTrayIcon();
    void initMySystemTrayIconAction();
    void initMySystemTrayIconMenu();

新增3个函数声明,分别用来初始化系统托盘、创建操作时间Action和创建菜单。

源文件实现:

void MainWindow::initMySystemTrayIcon()
{
    /*
     * 设置系统托盘内容
     */
    m_trayIcon = new QSystemTrayIcon(this);
    m_trayIcon->setIcon(QIcon(":/Images/logo.ico"));
    m_trayIcon->setToolTip("DateServer");
    m_trayIcon->show();
    connect(m_trayIcon,&QSystemTrayIcon::activated,this,[=](QSystemTrayIcon::ActivationReason temp){
        switch (temp) {
        case QSystemTrayIcon::Trigger:
        {
            //单击图标时间
            break;
        }
        case QSystemTrayIcon::DoubleClick:
        {
            if(this->isHidden())
            {
                this->show();
            }
            else
            {
                this->hide();
            }
            break;
        }
        }
    });
    initMySystemTrayIconAction();
    initMySystemTrayIconMenu();
    m_trayIcon->showMessage("Tip","DataServer is running",QSystemTrayIcon::Information,5000);
}
void MainWindow::initMySystemTrayIconAction()
{
    /*
     * 创建两个Action
     */
    m_showWindowAction = new QAction(QIcon(":/Images/logo.ico"),"显示界面",this);
    connect(m_showWindowAction,&QAction::triggered,this,[=](){
        this->show();
    });
    m_exitAppAction = new QAction(QIcon(":/Images/exit.ico"),"退出程序",this);
    connect(m_exitAppAction,&QAction::triggered,this,[=](){
        this->close();
    });
}
void MainWindow::initMySystemTrayIconMenu()
{
    /*
     * 创建菜单
     */
    m_trayIconMenu = new QMenu(this);
    m_trayIconMenu->addAction(m_showWindowAction);
    m_trayIconMenu->addSeparator();
    m_trayIconMenu->addAction(m_exitAppAction);
    m_trayIcon->setContextMenu(m_trayIconMenu);
}

QSystemTrayIcon:

以上就是今天系统托盘的内容,今天的知识点主要就是“QSystemTrayIcon”。看下官方的描述:


“Modern operating systems usually provide a special area on the desktop, called the system tray or notification area, where long-running applications can display icons and short messages.”


大致翻译呢,就是现在操作系统通常会提在桌面上提供一个特殊的区域,我们把这个区域称为系统托盘或通知区域,长期运行的应用程序可以在这里显示图标和信息。

image.png

对这个类更详细的内容,大家可以自行百度“QSystemTrayIcon”或直接在Qt的帮助文档中查找该类即可。



解决托盘栏消息不弹出问题:

中间有个小插曲,我看发现我在启动了托盘类ShowMessage()这个函数的时候,电脑没有任何反应,我还以为是我的代码问题,或者是win10 的版本问题(专业工作站版本),原来毛病出自这里

image.png

折腾一下午,同时还要注意一个地方:

image.png

这里有可能也会阻止通知信息的弹出。

目录
相关文章
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
1628 0
|
网络协议 关系型数据库 应用服务中间件
如何迁移网站数据到新的服务器
迁移网站数据到新服务器是一个系统化的过程,需谨慎操作以避免数据丢失或服务中断。小编为您整理发布如何迁移网站数据到新的服务器,以下是详细步骤和注意事项。
|
11月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
1203 11
|
12月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
543 18
|
12月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
763 15
|
存储 Ubuntu Linux
HPE SPP 2025.09.00.00 - HPE 服务器固件、驱动程序和系统软件包 (Released Oct 2025)
HPE SPP 2025.09.00.00 - HPE 服务器固件、驱动程序和系统软件包
372 0
|
域名解析 运维 监控
阿里云轻量服务器的系统镜像和应用镜像的区别
轻量应用服务器是阿里云推出的易用型云服务器,支持一键部署、域名解析、安全管理和运维监控。本文介绍其系统镜像与应用镜像的区别及选择建议,助您根据业务需求和技术能力快速决策,实现高效部署。
|
存储 机器学习/深度学习 缓存
阿里云九代云服务器怎么样?计算型c9i、通用型g9i、内存型r9i实例介绍
阿里云第9代云服务器主要实例规格包括计算型c9i、通用型g9i、内存型r9i,本文将为大家介绍阿里云九代云服务器中的计算型c9i、通用型g9i、内存型r9i实例的主要性能特点,并分享最新的活动价格信息,以供参考。
1052 1
|
存储 Linux 测试技术
HPE SPP 2025.07.00.00 - HPE 服务器固件、驱动程序和系统软件包
HPE SPP 2025.07.00.00 - HPE 服务器固件、驱动程序和系统软件包
482 4
|
弹性计算 前端开发 NoSQL
2025最新阿里云服务器配置选择攻略:CPU、内存、带宽与系统盘全解析
本文详解2025年阿里云服务器ECS配置选择策略,涵盖CPU、内存、带宽与系统盘推荐,助你根据业务需求精准选型,提升性能与性价比。

推荐镜像

更多
  • qt