当前位置:   article > 正文

Qt做关于界面

Qt做关于界面

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

解决的问题:

解决显示版本信息的UI

Axure界面图:


如何实现:

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

UI的实现图:


代码块解析:

.h文件

  1. /*********************************************************************************
  2. *Author:zhouFuLiang
  3. *Date: 2024-04-20 16:46
  4. *Description: 显示关于信息
  5. **********************************************************************************/
  6. #ifndef DEABOUTUI_H
  7. #define DEABOUTUI_H
  8. #include <QDialog>
  9. #include <QLabel>
  10. // 数据结构,用于存储版本信息
  11. struct VersionInfo {
  12. QString appVersion;
  13. QString installDate;
  14. QString content;
  15. QString fpgaVersion;
  16. QString fpgaInstDate;
  17. QString fpgaContent;
  18. };
  19. class DeAboutUi : public QDialog
  20. {
  21. Q_OBJECT
  22. public:
  23. explicit DeAboutUi(QWidget *parent = 0);
  24. void writeFpgaVesion(int iValue);
  25. void writeFpgaInstallDate(int iValue);
  26. signals:
  27. public slots:
  28. private:
  29. void initConnect();
  30. void initGeometry();
  31. /*
  32. * @brief 将整数转换为日期时间,
  33. * @param intValue 如2022
  34. * @param
  35. * @return 返回对应的QString
  36. */
  37. QString intToDateString(int intValue);
  38. void writeDefaultVersionInfo();
  39. VersionInfo readVersionInfo();
  40. /*
  41. * @brief 更新版本信息的UI
  42. * @param
  43. * @param
  44. * @return
  45. */
  46. void notifyVersionUi();
  47. private:
  48. QLabel *m_pSoftVer;
  49. QLabel *m_pSoftData;
  50. QLabel *m_pSoftContent;
  51. QLabel *m_pFpgaVer;
  52. QLabel *m_pFpgaData;
  53. QLabel *m_pFpgaContent;
  54. QFrame *pVLine1;
  55. QFrame *pVLine2;
  56. QString m_sysVesPath;
  57. };
  58. #endif // DEABOUTUI_H

.cpp文件

  1. #include "deabout_ui.h"
  2. #include <QVBoxLayout>
  3. #include <QGridLayout>
  4. #include "public.h"
  5. DeAboutUi::DeAboutUi(QWidget *parent) : QDialog(parent)
  6. {
  7. this->resize(350,250);
  8. this->setWindowTitle(QString::fromLocal8Bit("关于"));
  9. m_pSoftVer = new QLabel(this);
  10. m_pSoftData= new QLabel(this);
  11. m_pSoftContent= new QLabel(this);
  12. m_pFpgaVer= new QLabel(this);
  13. m_pFpgaData= new QLabel(this);
  14. m_pFpgaContent= new QLabel(this);
  15. pVLine1 = new QFrame(this);
  16. pVLine1->setFrameStyle(QFrame::HLine | QFrame::Plain);
  17. pVLine1->setLineWidth(2);
  18. pVLine1->setStyleSheet("color: black");
  19. pVLine2 = new QFrame(this);
  20. pVLine2->setFrameStyle(QFrame::HLine | QFrame::Plain);
  21. pVLine2->setLineWidth(2);
  22. pVLine2->setStyleSheet("color: black");
  23. initGeometry();
  24. initConnect();
  25. m_sysVesPath = qApp->applicationDirPath()+ "/" + "AppDoc/SystemIni/" + "version.ini";
  26. // 检查配置文件是否存在
  27. QFileInfo configFile(m_sysVesPath);
  28. if (!configFile.exists()) {
  29. // 如果配置文件不存在,则写入默认版本信息
  30. writeDefaultVersionInfo();
  31. }
  32. // 读取版本信息
  33. notifyVersionUi();
  34. writeFpgaInstallDate(20210212);
  35. }
  36. void DeAboutUi::writeFpgaVesion(int iValue)
  37. {
  38. QString fpgaVersion= QString::number(iValue);
  39. // 创建QSettings对象并指定INI文件路径
  40. QSettings settings(m_sysVesPath, QSettings::IniFormat);
  41. // 写入版本信息到INI文件
  42. settings.beginGroup("FPGAVersion");
  43. settings.setValue("FpgaVersion", fpgaVersion);
  44. settings.endGroup();
  45. notifyVersionUi();
  46. }
  47. void DeAboutUi::writeFpgaInstallDate(int iValue)
  48. {
  49. QString fpgaDate= intToDateString(iValue);
  50. // 创建QSettings对象并指定INI文件路径
  51. QSettings settings(m_sysVesPath, QSettings::IniFormat);
  52. // 写入版本信息到INI文件
  53. settings.beginGroup("FPGAVersion");
  54. settings.setValue("FpgaDate", fpgaDate);
  55. settings.endGroup();
  56. notifyVersionUi();
  57. }
  58. void DeAboutUi::initConnect()
  59. {
  60. }
  61. void DeAboutUi::initGeometry()
  62. {
  63. QFont font;
  64. font.setBold(true);
  65. font.setFamily("Microsoft JhengHei");
  66. QVBoxLayout *layout = new QVBoxLayout;
  67. QLabel *sLabey = new QLabel(QString::fromLocal8Bit("软件版本:"), this);
  68. sLabey->setFont(font);
  69. layout->addWidget(sLabey, Qt::AlignLeft | Qt::AlignBottom);
  70. QGridLayout *glayout1 = new QGridLayout;
  71. glayout1->addWidget(new QLabel(QString::fromLocal8Bit("版本号:"), this),0, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  72. glayout1->addWidget(m_pSoftVer,0, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  73. glayout1->addWidget(new QLabel(QString::fromLocal8Bit("日期:"), this),1, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  74. glayout1->addWidget(m_pSoftData,1, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  75. glayout1->addWidget(new QLabel(QString::fromLocal8Bit("内容:"), this),2, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  76. glayout1->addWidget(m_pSoftContent,2, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  77. QGridLayout *glayout2 = new QGridLayout;
  78. glayout2->addWidget(new QLabel(QString::fromLocal8Bit("版本号:"), this),0, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  79. glayout2->addWidget(m_pFpgaVer,0, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  80. glayout2->addWidget(new QLabel(QString::fromLocal8Bit("日期:"), this),1, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  81. glayout2->addWidget(m_pFpgaData,1, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  82. glayout2->addWidget(new QLabel(QString::fromLocal8Bit("内容:"), this),2, 0, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  83. glayout2->addWidget(m_pFpgaContent,2, 1, 1, 1,Qt::AlignLeft | Qt::AlignHCenter);
  84. layout->addWidget(pVLine1, 2, Qt::AlignTop);
  85. layout->addLayout(glayout1);
  86. QLabel *fLabey = new QLabel(QString::fromLocal8Bit("FPGA版本:"), this);
  87. fLabey->setFont(font);
  88. layout->addWidget(fLabey, Qt::AlignLeft | Qt::AlignBottom);
  89. layout->addWidget(pVLine2, 0, Qt::AlignTop);
  90. layout->addLayout(glayout2);
  91. this->setLayout(layout);
  92. }
  93. QString DeAboutUi::intToDateString(int intValue)
  94. {
  95. // 解析年、月、日
  96. int year = intValue / 10000; // 获取年份
  97. int month = (intValue / 100) % 100; // 获取月份
  98. int day = intValue % 100; // 获取日
  99. // 构建QDateTime对象
  100. QDateTime dateTime(QDate(year, month, day));
  101. // 将QDateTime对象格式化为字符串
  102. return dateTime.toString("yyyy-MM-dd"); // 根据需要选择日期格式
  103. }
  104. void DeAboutUi::writeDefaultVersionInfo()
  105. {
  106. // 创建QSettings对象并指定INI文件路径
  107. QSettings settings(m_sysVesPath, QSettings::IniFormat);
  108. // 写入默认版本信息到INI文件
  109. settings.beginGroup("APPVersion");
  110. settings.setValue("AppVersion", QString("%1").arg(FORMAL_VERSION_NUMBER));
  111. settings.setValue("AppDate", "2024-04-20");
  112. settings.setValue("AppContent", "strContent");
  113. settings.endGroup();
  114. settings.beginGroup("FPGAVersion");
  115. settings.setValue("FpgaVersion", QString("%1").arg(FORMAL_VERSION_NUMBER));
  116. settings.setValue("FpgaDate", "2024-04-20");
  117. settings.setValue("FpgaContent", "strContent");
  118. settings.endGroup();
  119. qDebug() << "Default version information has been written to config.ini";
  120. }
  121. VersionInfo DeAboutUi::readVersionInfo()
  122. {
  123. // 创建QSettings对象并指定INI文件路径
  124. QSettings settings(m_sysVesPath, QSettings::IniFormat);
  125. // 读取版本信息
  126. VersionInfo info;
  127. settings.beginGroup("APPVersion");
  128. info.appVersion = settings.value("AppVersion").toString();
  129. info.installDate = settings.value("AppDate").toString();
  130. info.content = settings.value("AppContent").toString();
  131. settings.endGroup();
  132. settings.beginGroup("FPGAVersion");
  133. info.fpgaVersion = settings.value("FpgaVersion").toString();
  134. info.fpgaInstDate = settings.value("FpgaDate").toString();
  135. info.fpgaContent = settings.value("FpgaContent").toString();
  136. settings.endGroup();
  137. return info;
  138. }
  139. void DeAboutUi::notifyVersionUi()
  140. {
  141. VersionInfo vers = readVersionInfo();
  142. m_pSoftVer->setText(QString("V%1").arg(vers.appVersion));
  143. m_pSoftData->setText(QString("%1").arg(vers.installDate));
  144. m_pSoftContent->setText(QString("%1").arg(vers.content));
  145. m_pFpgaVer->setText(QString("%1").arg(vers.fpgaVersion));
  146. m_pFpgaData->setText(QString("%1").arg(vers.fpgaInstDate));
  147. m_pFpgaContent->setText(QString("%1").arg(vers.fpgaContent));
  148. }

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/494662
推荐阅读
相关标签
  

闽ICP备14008679号