赞
踩
在上位机系统中,经常需要显示当前软件版本,当前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的改变。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。