Qt做关于界面

在上位机系统中,经常需要显示当前软件版本,当前fpga版本,那么咱就做一个help的菜单的关于界面

解决的问题:

解决显示版本信息的UI

Axure界面图:


如何实现:

实现文件的存储:QSetting来存储版本信息文件,详细看代码

UI的实现图:


代码块解析:

.h文件

/*********************************************************************************
*Author:zhouFuLiang
*Date: 2024-04-20  16:46
*Description: 显示关于信息
**********************************************************************************/
#ifndef DEABOUTUI_H
#define DEABOUTUI_H#include <QDialog>
#include <QLabel>// 数据结构,用于存储版本信息
struct VersionInfo {QString appVersion;QString installDate;QString content;QString fpgaVersion;QString fpgaInstDate;QString fpgaContent;
};class DeAboutUi : public QDialog
{Q_OBJECT
public:explicit DeAboutUi(QWidget *parent = 0);void writeFpgaVesion(int iValue);void writeFpgaInstallDate(int iValue);signals:public slots:private:void initConnect();void initGeometry();/** @brief 将整数转换为日期时间,* @param intValue 如2022* @param* @return 返回对应的QString*/QString intToDateString(int intValue);void writeDefaultVersionInfo();VersionInfo readVersionInfo();/** @brief 更新版本信息的UI* @param* @param* @return*/void notifyVersionUi();
private:QLabel *m_pSoftVer;QLabel *m_pSoftData;QLabel *m_pSoftContent;QLabel *m_pFpgaVer;QLabel *m_pFpgaData;QLabel *m_pFpgaContent;QFrame *pVLine1;QFrame *pVLine2;QString m_sysVesPath;
};#endif // DEABOUTUI_H

.cpp文件

#include "deabout_ui.h"
#include <QVBoxLayout>
#include <QGridLayout>
#include "public.h"DeAboutUi::DeAboutUi(QWidget *parent) : QDialog(parent)
{this->resize(350,250);this->setWindowTitle(QString::fromLocal8Bit("关于"));m_pSoftVer = new QLabel(this);m_pSoftData= new QLabel(this);m_pSoftContent= new QLabel(this);m_pFpgaVer= new QLabel(this);m_pFpgaData= new QLabel(this);m_pFpgaContent= new QLabel(this);pVLine1 = new QFrame(this);pVLine1->setFrameStyle(QFrame::HLine | QFrame::Plain);pVLine1->setLineWidth(2);pVLine1->setStyleSheet("color: black");pVLine2 = new QFrame(this);pVLine2->setFrameStyle(QFrame::HLine | QFrame::Plain);pVLine2->setLineWidth(2);pVLine2->setStyleSheet("color: black");initGeometry();initConnect();m_sysVesPath = qApp->applicationDirPath()+ "/" + "AppDoc/SystemIni/" + "version.ini";// 检查配置文件是否存在QFileInfo configFile(m_sysVesPath);if (!configFile.exists()) {// 如果配置文件不存在,则写入默认版本信息writeDefaultVersionInfo();}// 读取版本信息notifyVersionUi();writeFpgaInstallDate(20210212);}void DeAboutUi::writeFpgaVesion(int iValue)
{QString fpgaVersion= QString::number(iValue);// 创建QSettings对象并指定INI文件路径QSettings settings(m_sysVesPath, QSettings::IniFormat);// 写入版本信息到INI文件settings.beginGroup("FPGAVersion");settings.setValue("FpgaVersion", fpgaVersion);settings.endGroup();notifyVersionUi();
}void DeAboutUi::writeFpgaInstallDate(int iValue)
{QString fpgaDate= intToDateString(iValue);// 创建QSettings对象并指定INI文件路径QSettings settings(m_sysVesPath, QSettings::IniFormat);// 写入版本信息到INI文件settings.beginGroup("FPGAVersion");settings.setValue("FpgaDate", fpgaDate);settings.endGroup();notifyVersionUi();
}void DeAboutUi::initConnect()
{}void DeAboutUi::initGeometry()
{QFont font;font.setBold(true);font.setFamily("Microsoft JhengHei");QVBoxLayout *layout = new QVBoxLayout;QLabel *sLabey = new QLabel(QString::fromLocal8Bit("软件版本:"), this);sLabey->setFont(font);layout->addWidget(sLabey, Qt::AlignLeft | Qt::AlignBottom);QGridLayout *glayout1 = new QGridLayout;glayout1->addWidget(new QLabel(QString::fromLocal8Bit("版本号:"), this),0, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout1->addWidget(m_pSoftVer,0, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout1->addWidget(new QLabel(QString::fromLocal8Bit("日期:"), this),1, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout1->addWidget(m_pSoftData,1, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout1->addWidget(new QLabel(QString::fromLocal8Bit("内容:"), this),2, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout1->addWidget(m_pSoftContent,2, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);QGridLayout *glayout2 = new QGridLayout;glayout2->addWidget(new QLabel(QString::fromLocal8Bit("版本号:"), this),0, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout2->addWidget(m_pFpgaVer,0, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout2->addWidget(new QLabel(QString::fromLocal8Bit("日期:"), this),1, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout2->addWidget(m_pFpgaData,1, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout2->addWidget(new QLabel(QString::fromLocal8Bit("内容:"), this),2, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);glayout2->addWidget(m_pFpgaContent,2, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);layout->addWidget(pVLine1, 2, Qt::AlignTop);layout->addLayout(glayout1);QLabel *fLabey = new QLabel(QString::fromLocal8Bit("FPGA版本:"), this);fLabey->setFont(font);layout->addWidget(fLabey, Qt::AlignLeft | Qt::AlignBottom);layout->addWidget(pVLine2, 0, Qt::AlignTop);layout->addLayout(glayout2);this->setLayout(layout);
}QString DeAboutUi::intToDateString(int intValue)
{// 解析年、月、日int year = intValue / 10000; // 获取年份int month = (intValue / 100) % 100; // 获取月份int day = intValue % 100; // 获取日// 构建QDateTime对象QDateTime dateTime(QDate(year, month, day));// 将QDateTime对象格式化为字符串return dateTime.toString("yyyy-MM-dd"); // 根据需要选择日期格式
}void DeAboutUi::writeDefaultVersionInfo()
{// 创建QSettings对象并指定INI文件路径QSettings settings(m_sysVesPath, QSettings::IniFormat);// 写入默认版本信息到INI文件settings.beginGroup("APPVersion");settings.setValue("AppVersion", QString("%1").arg(FORMAL_VERSION_NUMBER));settings.setValue("AppDate", "2024-04-20");settings.setValue("AppContent", "strContent");settings.endGroup();settings.beginGroup("FPGAVersion");settings.setValue("FpgaVersion", QString("%1").arg(FORMAL_VERSION_NUMBER));settings.setValue("FpgaDate", "2024-04-20");settings.setValue("FpgaContent", "strContent");settings.endGroup();qDebug() << "Default version information has been written to config.ini";
}VersionInfo DeAboutUi::readVersionInfo()
{// 创建QSettings对象并指定INI文件路径QSettings settings(m_sysVesPath, QSettings::IniFormat);// 读取版本信息VersionInfo info;settings.beginGroup("APPVersion");info.appVersion = settings.value("AppVersion").toString();info.installDate = settings.value("AppDate").toString();info.content = settings.value("AppContent").toString();settings.endGroup();settings.beginGroup("FPGAVersion");info.fpgaVersion = settings.value("FpgaVersion").toString();info.fpgaInstDate = settings.value("FpgaDate").toString();info.fpgaContent = settings.value("FpgaContent").toString();settings.endGroup();return info;
}void DeAboutUi::notifyVersionUi()
{VersionInfo vers = readVersionInfo();m_pSoftVer->setText(QString("V%1").arg(vers.appVersion));m_pSoftData->setText(QString("%1").arg(vers.installDate));m_pSoftContent->setText(QString("%1").arg(vers.content));m_pFpgaVer->setText(QString("%1").arg(vers.fpgaVersion));m_pFpgaData->setText(QString("%1").arg(vers.fpgaInstDate));m_pFpgaContent->setText(QString("%1").arg(vers.fpgaContent));
}

其中有两点:fpga推给上位机的数据是一个int类型的如 int date = 20210212;需要转换

还有QSetting的用法,是为了单独去改变其中的一个值,写入文件,后期读取,如果FPga有推送版本,就更新对应的值,然后用UI的update,函数,来更新UI的改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转Virtual Box虚拟机

玩转Virtual Box虚拟机 虚拟化技术和虚拟机简介 什么是虚拟化技术&#xff1f; 虚拟化技术是将计算机的各种硬件资源予以抽象、转换、分割、组合的一种计算机技术。虚拟化技术打破了实体结构间不可切割的障碍&#xff0c;从而使用户可以按照需求重新组合硬件资源&#xff0c…

NX二次开发UF_MTX(矩阵运算)常用函数

目录 一、概述 二、函数的介绍 2.1 UF_MTX3_copy&#xff08;复制原来矩阵&#xff09; 2.2 UF_MTX3_determinant&#xff08;计算矩阵的行列式&#xff09; 2.3 UF_MTX3_identity&#xff08;单位矩阵&#xff09; 2.4 UF_MTX3_initialize&#xff08;可以根据X、Y方向向…

R: 阿尔法α多样性计算和箱图制作,以及差异分析

# install.packages("vegan") library(vegan) library(ggplot2) library(ggpubr)setwd("xxx") # 使用read.table()函数读取数据 df <- read.table("xxx", header TRUE, row.names 1)# 转置数据框 df <- t(df)# 计算每个样品的香农多样性…

【Linux】虚拟机与Xshell及VS Code的连接

一、基础环境 虚拟机&#xff1a;VMware Workstation Pro 虚拟机镜像&#xff1a;ubuntu-18.04.5-desktop-amd64.iso 其他&#xff1a;Xshell 6、Xftp 6、Visual Studio Code 上述软件的安装操作不再赘述&#xff0c;CSDN上有大量的优秀博文&#xff0c;可参考&#xff1a;详细…

SpringBoot---------Lombook

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具&#xff0c;通过使用对应的注解&#xff0c;可以在编译源码的时候生成对应的方法&#xff0c;也就是简化咱们之前pojo&#xff0c;实体类里面臃肿的get/set有参无参。 首先查看一…

学习51单片机 C语言知识

一、数据类型 C 语言包含的数据类型如下图所示 C51 的数据类型分为基本数据类型和组合数据类型&#xff0c;情况与标准 C 中的数据类型基本相同&#xff0c;但其中 char 型与 short 型相同&#xff0c;float 型与 double 型相同&#xff0c;另外&#xff0c;C51 中还有专门针…

免费一年期ssl证书怎么申请?看这里!(教育版、政务版)

自从去年年底开始&#xff0c;各大公有云陆续下架一年期的免费ssl证书&#xff0c;且申请数量都做了限制调整&#xff0c;那么现在去哪里申请免费一年期的ssl证书呢&#xff1f; 一、短期ssl证书 首先了解一下短期免费证书的平台&#xff0c;一般免费证书都为90天有效期&…

创新案例|Amazon.com 2023 年营销策略:电子商务零售巨头商业案例研究

2022 年最后一个季度&#xff0c;亚马逊报告净销售额超过 1,492 亿美元。这种季节性峰值是亚马逊季度报告的典型特征&#xff0c;但增长是不可否认的&#xff0c;因为这是该公司有史以来最高的季度。毫无疑问&#xff0c;这家电商零售巨头继续引领电商增长。本文将介绍我们今天…

木马——文件上传

目录 1、WebShell 2.一句话木马 靶场训练 3.蚁剑 虚拟终端 文件管理 ​编辑 数据操作 4.404.php 5.文件上传漏洞 客户端JS检测 右键查看元素&#xff0c;删除检测代码 BP拦截JPG修改为php 服务端检测 1.MIME类型检测 2.文件幻数检测 3.后缀名检测 1、WebShell W…

充气膜体育馆:为学校带来的健康运动环境

充气膜体育馆作为一种先进的建筑结构&#xff0c;配备先进的空气净化系统&#xff0c;为学校带来了重要的意义和价值。 充气膜体育馆不仅提供了室内运动场地&#xff0c;还通过先进的空气净化系统保障了学生在任何天气条件下都能进行健康的体育活动。尤其是在雾霾天气频繁的地区…

使用docker打包当前服务器的neo4j环境

Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖打包到一个可移植的容器中,这样应用程序就可以在任何支持Docker的平台上运行,而无需担心环境差异。 当运行一个Docker容器时,它会加载一个镜像并运行它。Docker在容器内部创建一个隔离的环境,这个环境被称…

使用spring boot集成shardingsphere分库分表简易测试

根据如下pom整上一个spring-boot项目&#xff0c;spring-boot版本用2.3.5&#xff0c;shardingsphere用5.1.1。 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://ww…

7-25 念数字

题目链接&#xff1a;7-25 念数字 一. 题目 1. 题目 2. 输入输出格式 3. 输入输出样例 4. 限制 二、代码 1. 代码实现 #include <iostream> #include <string> using namespace std;const string pinyin[] { // 每个数字对应的拼音"ling","yi&…

【Hadoop】- YARN架构[7]

前言 Yarn架构是一个用于管理和调度Hadoop集群资源的系统。它是Hadoop生态系统的一部分&#xff0c;主要用于解决Hadoop中的资源管理问题。 通过使用Yarn架构&#xff0c;Hadoop集群中的不同应用程序可以共享集群资源&#xff0c;并根据需要动态分配和回收资源。这种灵活的资…

验证线缆(汽车线束、网线、多芯线)破损或断开与正常线缆的区别在哪里?依AEM CV-100 k50测试仪

工厂产线生产的线缆&#xff08;汽车线束、网线、多芯线&#xff09;做成成品&#xff0c;即2端都安装好了模块。在这种情况下如何快速的判定此条线缆是合格的呢&#xff0c;此处的合格为物理层面上的合格&#xff08;不会出现开路、短路&#xff09;&#xff0c;也就是最基本保…

client-go源码结构及客户端对象

一、基础知识介绍 1、GVR 和 GVK G Goup资源组&#xff0c;包含一组资源操作的集合VVersion资源版本&#xff0c;用于区分不同API的稳定程度及兼容性RResource资源信息&#xff0c;用于区分不同的资源APIKKind资源对象类型&#xff0c;每个资源对象都需要Kind来区分它自身代表…

冒泡排序c++

题目描述 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 输入 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 输出 由大到小的n个非负整数&#xff0c;每个数占一行。 样例输入 …

restful请求风格的增删改查-----修改and删除

一、修改&#xff08;和添加类似&#xff09; 前端&#xff1a; <script type"text/javascript">function update(){//创建user对象var user {id:$("#id").val(),username:$("#username").val(),password:$("#password").val…

探索VR数字展厅,对企业未来展示新模式

在数字化浪潮的推动下&#xff0c;企业展示也在经历着一场革命&#xff0c;VR数字展厅正在以一种全新的方式重塑我们的生活和工作空间&#xff0c;不仅重塑了客户的观展体验&#xff0c;也为企业营销打开了新的渠道。 VR数字展厅作为实体展厅的数字化延伸&#xff0c;正以其沉浸…

【论文笔记】基于预训练模型的持续学习(Continual Learning)(增量学习,Incremental Learning)

论文链接&#xff1a;Continual Learning with Pre-Trained Models: A Survey 代码链接&#xff1a;Github: LAMDA-PILOT 持续学习&#xff08;Continual Learning, CL&#xff09;旨在使模型在学习新知识的同时能够保留原来的知识信息了&#xff0c;然而现实任务中&#xff…