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

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

目录
相关文章
|
18天前
|
存储 缓存 资源调度
阿里云服务器经济型、通用算力型、计算型、通用型、内存型实例区别与选择指南
在我们通过阿里云的活动选购云服务器的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。本文将详细解析阿里云的经济型、通用算力型、计算型、通用型和内存型实例的性能特点及适用场景,帮助用户根据自己的业务需求做出明智的选择。
|
1月前
|
存储 分布式计算 安全
阿里云服务器经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例介绍与选择参考
在阿里云现在的活动中,可选的云服务器实例规格主要有经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例,虽然阿里云在活动中提供了多种不同规格的云服务器实例,以满足不同用户和应用场景的需求。但是有的用户并不清楚他们的性能如何,应该如何选择。本文将详细介绍阿里云服务器中的经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例的性能、适用场景及选择参考,帮助用户根据自身需求做出合适的选择。
|
1月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
1月前
|
安全 云计算
服务器系统资源不足怎么办
服务器系统资源不足怎么办
39 4
|
2月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
79 11
|
2月前
|
弹性计算 监控 数据库
制造企业ERP系统迁移至阿里云ECS的实例,详细介绍了从需求分析、数据迁移、应用部署、网络配置到性能优化的全过程
本文通过一个制造企业ERP系统迁移至阿里云ECS的实例,详细介绍了从需求分析、数据迁移、应用部署、网络配置到性能优化的全过程,展示了企业级应用上云的实践方法与显著优势,包括弹性计算资源、高可靠性、数据安全及降低维护成本等,为企业数字化转型提供参考。
64 5
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
60 4
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
63 3
|
2月前
|
缓存 监控 数据库
提高服务器响应速度是提升用户体验和系统性能的关键
提高服务器响应速度是提升用户体验和系统性能的关键
43 3
|
1月前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。