当前位置: 首页 > news >正文

QSettings使用示例

解决的问题:

平常要存储一些临时数据,或者ini的系统参数数据,以下是源码解析


如何实现:

实现的UI如下

主要功能:

初始化:

m_settings = new QSettings("DParamSetting.ini", QSettings::IniFormat);

设置值

    m_settings->beginGroup(QString("%1").arg(groupName));
    m_settings->setValue("t1Value", dParam.t1Value);
    m_settings->endGroup();

取值
   dParam.t1Value = m_settings->value(QString("%1/%2").arg(groupName).arg("t1Value")).toInt();


代码块解析:

.h文件

#ifndef DPARAMSETTING_H
#define DPARAMSETTING_H#include <QWidget>
#include <QComboBox>
#include <QPushButton>
#include <QLineEdit>
#include <QSettings>typedef struct
{int t1Value;int t2Value;int t3Value;int frequency1Value;int frequency2Value;int amplitude1Value;int amplitude2Value;int numDropValue;
}DropletParam;class DParamSetting : public QWidget
{Q_OBJECTpublic:DParamSetting(QWidget *parent = 0);~DParamSetting();private:void initObject();void initGeometry();void initConnect();void readDParams(const QString groupName, DropletParam &dParam);void writeDParams(const QString groupName, const DropletParam dParam);DropletParam assemblingDatagram();void displayDatagram(const DropletParam dParam);private slots:void onSaveBtnClicked();void onCancelBtnClicked();void onStartBtnClicked();void onSourBoardChaned(const QString &str);private:QComboBox *m_pSourBoardCb;  QPushButton *m_pT1Btn;QPushButton *m_pT2Btn;QPushButton *m_pT3Btn;QPushButton *m_pFr1Btn;QPushButton *m_pFr2Btn;QPushButton *m_pAmp1Btn;QPushButton *m_pAmp2Btn;QPushButton *m_pNumberBtn;QLineEdit *m_pT1Edit;QLineEdit *m_pT2Edit;QLineEdit *m_pT3Edit;QLineEdit *m_pFr1Edit;QLineEdit *m_pFr2Edit;QLineEdit *m_pAmp1Edit;QLineEdit *m_pAmp2Edit;QLineEdit *m_pNumberEdit;QPushButton *m_pSaveBtn;QPushButton *m_pStartBtn;QPushButton *m_pCancelBtn;QSettings *m_settings;
};#endif // DPARAMSETTING_H

.cpp文件

#include "dparamsetting.h"
#include <QGridLayout>
#include <QDebug>DParamSetting::DParamSetting(QWidget *parent): QWidget(parent)
{initObject();initGeometry();initConnect();
}DParamSetting::~DParamSetting()
{delete m_settings;
}void DParamSetting::initObject()
{m_pSourBoardCb = new QComboBox(this); QStringList strlist;strlist.append("abc");strlist.append("aba");m_pSourBoardCb->addItems(strlist);m_pT1Btn = new QPushButton("T1", this);m_pT2Btn = new QPushButton("T2", this);m_pT3Btn = new QPushButton("T3", this);m_pFr1Btn = new QPushButton("Fre1", this);m_pFr2Btn = new QPushButton("Fre2", this);m_pAmp1Btn = new QPushButton("Amp1", this);m_pAmp2Btn = new QPushButton("Amp2", this);m_pNumberBtn = new QPushButton("Number", this);m_pT1Edit = new QLineEdit("0", this);m_pT2Edit = new QLineEdit("0", this);m_pT3Edit = new QLineEdit("0", this);m_pFr1Edit = new QLineEdit("0", this);m_pFr2Edit = new QLineEdit("0", this);m_pAmp1Edit = new QLineEdit("0", this);m_pAmp2Edit = new QLineEdit("0", this);m_pNumberEdit = new QLineEdit("0", this);m_pSaveBtn = new QPushButton("Save", this);m_pStartBtn = new QPushButton("Start", this);m_pCancelBtn = new QPushButton("Cancel", this);m_settings = new QSettings("DParamSetting.ini", QSettings::IniFormat);}void DParamSetting::initGeometry()
{QGridLayout *glayout = new QGridLayout(this);glayout->addWidget(m_pSourBoardCb, 1, 1, 1, 2, Qt::AlignLeft);glayout->addWidget(m_pT1Btn, 2, 1, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pT1Edit, 2, 2, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pFr1Btn, 2, 3, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pFr1Edit, 2, 4, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pAmp1Btn, 2, 5, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pAmp1Edit, 2, 6, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pT2Btn, 3, 1, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pT2Edit, 3, 2, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pFr2Btn, 3, 3, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pFr2Edit, 3, 4, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pAmp2Btn, 3, 5, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pAmp2Edit, 3, 6, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pT3Btn, 4, 1, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pT3Edit, 4, 2, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pNumberBtn, 4, 3, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pNumberEdit, 4, 4, 1, 1, Qt::AlignCenter);glayout->addWidget(m_pStartBtn, 5, 4, 1, 1, Qt::AlignRight);glayout->addWidget(m_pSaveBtn, 5, 5, 1, 1, Qt::AlignRight);glayout->addWidget(m_pCancelBtn, 5, 6, 1, 1, Qt::AlignLeft);this->setLayout(glayout);
}void DParamSetting::initConnect()
{connect(m_pSaveBtn, &QPushButton::clicked, this, &DParamSetting::onSaveBtnClicked);connect(m_pCancelBtn, &QPushButton::clicked, this, &DParamSetting::onCancelBtnClicked);connect(m_pSourBoardCb, &QComboBox::currentTextChanged, this, &DParamSetting::onSourBoardChaned);
}void DParamSetting::readDParams(const QString groupName, DropletParam &dParam)
{dParam.t1Value = m_settings->value(QString("%1/%2").arg(groupName).arg("t1Value")).toInt();dParam.t2Value = m_settings->value(QString("%1/%2").arg(groupName).arg("t2Value")).toInt();dParam.t3Value = m_settings->value(QString("%1/%2").arg(groupName).arg("t3Value")).toInt();dParam.frequency1Value = m_settings->value(QString("%1/%2").arg(groupName).arg("frequency1Value")).toInt();dParam.frequency2Value = m_settings->value(QString("%1/%2").arg(groupName).arg("frequency2Value")).toInt();dParam.amplitude1Value = m_settings->value(QString("%1/%2").arg(groupName).arg("amplitude1Value")).toInt();dParam.amplitude2Value = m_settings->value(QString("%1/%2").arg(groupName).arg("amplitude2Value")).toInt();dParam.numDropValue = m_settings->value(QString("%1/%2").arg(groupName).arg("numDropValue")).toInt();
}void DParamSetting::writeDParams(const QString groupName, const DropletParam dParam)
{m_settings->beginGroup(QString("%1").arg(groupName));m_settings->setValue("t1Value", dParam.t1Value);m_settings->setValue("t2Value", dParam.t2Value);m_settings->setValue("t3Value", dParam.t3Value);m_settings->setValue("frequency1Value", dParam.frequency1Value);m_settings->setValue("frequency2Value", dParam.frequency2Value);m_settings->setValue("amplitude1Value", dParam.amplitude1Value);m_settings->setValue("amplitude2Value", dParam.amplitude2Value);m_settings->setValue("numDropValue", dParam.numDropValue);m_settings->endGroup();
}DropletParam DParamSetting::assemblingDatagram()
{DropletParam ts;ts.t1Value = m_pT1Edit->text().toInt();ts.t2Value = m_pT2Edit->text().toInt();ts.t3Value = m_pT3Edit->text().toInt();ts.frequency1Value = m_pFr1Edit->text().toInt();ts.frequency2Value = m_pFr2Edit->text().toInt();ts.amplitude1Value = m_pAmp1Edit->text().toInt();ts.amplitude2Value = m_pAmp2Edit->text().toInt();ts.numDropValue = m_pNumberEdit->text().toInt();return ts;}void DParamSetting::displayDatagram(const DropletParam dParam)
{m_pT1Edit->setText(QString::number(dParam.t1Value));m_pT2Edit->setText(QString::number(dParam.t2Value));m_pT3Edit->setText(QString::number(dParam.t3Value));m_pFr1Edit->setText(QString::number(dParam.frequency1Value));m_pFr2Edit->setText(QString::number(dParam.frequency2Value));m_pAmp1Edit->setText(QString::number(dParam.amplitude1Value));m_pAmp2Edit->setText(QString::number(dParam.amplitude2Value));m_pNumberEdit->setText(QString::number(dParam.numDropValue));
}void DParamSetting::onSaveBtnClicked()
{writeDParams(m_pSourBoardCb->currentText(), assemblingDatagram());
}void DParamSetting::onCancelBtnClicked()
{DropletParam ts;readDParams(m_pSourBoardCb->currentText(), ts);displayDatagram(ts);
}void DParamSetting::onStartBtnClicked()
{}void DParamSetting::onSourBoardChaned(const QString &str)
{DropletParam ts;readDParams(str, ts);displayDatagram(ts);
}

相关文章:

  • 网络安全“三保一评”深度解析
  • 在Spring Boot启动时禁止自动配置数据源相关的组件、@SpringBootApplication
  • 嵌入式学习day26 Linux
  • 算法打卡day3|链表篇|Leetcode 203.移除链表元素、 707.设计链表 、 206.反转链表
  • 免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案
  • 倒计时42天
  • React入门简介
  • pyspark分布式部署随机森林算法
  • 学习python的第7天,她不再开放她的听歌榜单
  • 【es6 】中的装饰器 decorator 到底是什么,有什么用,和ts 中的装饰器decorator有啥区别
  • 包装类详解
  • FPS游戏之漫谈Shader.globalMaximumLOD
  • 【Elasticsearch专栏 18】深入探索:Elasticsearch核心配置与性能调优 保姆级教程 企业级实战
  • 【Antd】Form 表单获取不到 Input 的值
  • DataGear制作基于three.js的3D数据可视化看板
  • 网络传输文件的问题
  • 自己简单写的 事件订阅机制
  • @jsonView过滤属性
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • CSS 提示工具(Tooltip)
  • css系列之关于字体的事
  • gitlab-ci配置详解(一)
  • Laravel 中的一个后期静态绑定
  • mysql外键的使用
  • python学习笔记-类对象的信息
  • Spring Cloud Feign的两种使用姿势
  • 利用DataURL技术在网页上显示图片
  • 物联网链路协议
  • 关于Android全面屏虚拟导航栏的适配总结
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $$$$GB2312-80区位编码表$$$$
  • (1)(1.9) MSP (version 4.2)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (done) 两个矩阵 “相似” 是什么意思?
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (python)数据结构---字典
  • (原創) 未来三学期想要修的课 (日記)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • .CSS-hover 的解释
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • :=
  • [ C++ ] STL---仿函数与priority_queue
  • [2018-01-08] Python强化周的第一天
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [CentOs7]iptables防火墙安装与设置
  • [codeforces]Recover the String
  • [Markdown] 02 简单应用 第二弹
  • [MySQL复制异常]Cannot execute statement: impossible to write to binary log since statement is in row for
  • [Spring boot] Spring boot 实现Excel批量导入数据并将文件保存到本地
  • [Step By Step]在SAP Business Objects Data Services中使用SQL Transform将数据导入到SAP HANA中(SQL Transform)...
  • [UDS] --- CommunicationControl 0x28
  • [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较