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_OBJECT

public:
    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);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue项目基础开发(13)vue的注册页面

1创建页面 在view下面创建Login.vue 编写login.vue的代码 <script setup> import {User,Lock} from @element-plus/icons-vue import {ref } from vue&#

【JavaEE】_Servlet程序的编写方法

目录 1. 创建项目 2. 引入依赖 3. 创建目录结构 3.1 在main目录下创建一个webapp目录 3.2 在webapp目录下创建一个WEB-INF目录 3.3 在WEB-INF目录下创建一个web.xml文件 3.4 在web.xml中进行代码编写 4. 编写代码 4.1 在java目录下创建类 4.2 打印"hello world&…

代码随想录算法训练营第二十六天|39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 刷题https://leetcode.cn/problems/combination-sum/description/文章讲解https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html视频讲解https://www.bilibili.com/video/BV1KT4y1M7HJ/?vd_sourceaf4853e80f89e28094a5fe1e220d9062 回溯…

vue+django+python办公耗材网上商城采购库存管理系统

办公耗材采购信息管理是信息行业业务流程过程中十分重要且必备的环节之一&#xff0c;在信息行业业务流程当中起着承上启下的作用&#xff0c;其重要性不言而喻。但是&#xff0c;目前许多信息行业在具体的业务流程处理过程中仍然使用手工操作的方式来实施&#xff0c;不仅费时…

C语言运用中断子系统用驱动控制led实验,c语言串口led点灯实验(驱动+应用层)

中断子系统用驱动控制led实验 驱动代码 #include <linux/init.h> #include <linux/module.h>#include<linux/interrupt.h> #include<linux/gpio.h> #include<linux/timer.h>#include<linux/of.h> #include<linux/of_irq.h> #inclu…

MySQL MGR 恢复(从库维度)

集群信息 一主两从 端口 角色 3307 主 3309 备 3303 备 从库故障 关掉 3303 从库 删除所有数据&#xff0c;模拟故障 从库恢复还原(物理备份恢复) 备份另一台 处于组关中的 从库的数据&#xff0c;端口为 3309 物理备份 xtrabackup --defaults-file/etc/my3309.cnf …

idea在工具栏中显示快速创建包和类的图标

一、效果图 点击需要创建包或者类的位置&#xff0c;在点击对用的图标就可以快速创建类或者包了。 二、设置 步骤一 View-->Appearance-->Toolbar 步骤二 File-->Settings-->Appearance & Behavior-->Menus and Toolbars-->Main Toolbar-->----…

路飞项目--06

redis介绍和安装 # 数据库&#xff1a; 关系型数据库&#xff1a;mysql、oracle、postgrasql、sqlserver、sqlite IBM&#xff1a;服务器 Oracle&#xff1a;数据库 达梦 EMC&#xff1a;存储 非关系型数据库: redis、mongodb、es…

数据库增删改查

DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数据库用户、控制数…

高录用快见刊【最快会后两个月左右见刊】第三届社会科学与人文艺术国际学术会议 (SSHA 2024)

第三届社会科学与人文艺术国际学术会议 (SSHA 2024) 2024 3rd International Conference on Social Sciences and Humanities and Arts *文章投稿均可免费参会 *高录用快见刊【最快会后两个月左右见刊】 重要信息 会议官网&#xff1a;icssha.com 大会时间&#xff1a;202…

基于生成扩散模型的分子对接程序-DiffDock安装及使用

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、DiffDock是什么&#xff1f;二、DiffDock安装步骤1. 下载2.创建conda环境并安装STEP 1. 创建conda环境并配置STEP 2. 配置ESM和OpenFoldSTEP 3. 检查cuda和pytorch geometric安装STEP 4. 检查p…

Linux:Jenkins用户权限和管理

1.下载插件 由于Jenkins的默认权限管理并不是很精细所以我们安装一个插件进行权限的一个管理 插件名称为&#xff1a;Role-based Authorization Strategy 安装完插件我们再去配置一下 进入全局安全配置 选择这个Role-Based Strategy策略然后保存 2.创建角色 我们这里主要使…

ArcgisForJS如何在线编辑ArcGIS Server发布的几何要素?

文章目录 0.引言1.ArcGIS创建几何要素2.ArcGIS Server发布几何要素3.ArcgisForJS在线编辑ArcGIS Server发布的几何要素 0.引言 ArcGIS For JS 是一种用于创建和编辑地理信息的 JavaScript 库&#xff0c;它允许用户在线编辑 ArcGIS Server 发布的几何要素。本文从ArcGIS创建几…

小程序--应用生命周期

小程序的应用周期处理逻辑都写在app.js中。 一、onLaunch 小程序启动时&#xff08;初始化完成&#xff09;执行&#xff0c;只执行一次。 常用于小程序更新&#xff0c;获取启动参数&#xff0c;获取场景值。 二、onShow 小程序启动&#xff0c;或从后台切换至前台时执行。 …

代码随想录算法训练营day20||二叉树part07、● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 【需要领悟一下二叉树遍历上双指针操作&#xff0c;优先掌握递归】 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 思路 题目中要求在二叉…

第四十天| 343. 整数拆分、96.不同的二叉搜索树

Leetcode 343. 整数拆分 题目链接&#xff1a;343 整数拆分 题干&#xff1a;给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。 思考&#xff1a;动态规划。…

探索Promise异步模式抽象的变体——Promise.race篇

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 前言初识Promise.race探索Promise.raceAPI实例 前言 在本栏前一篇Promise.all中&#xff0c;我们可以实…

美格智能联合罗德与施瓦茨完成5G RedCap模组SRM813Q验证,推动5G轻量化全面商用

全球5G发展进入下半场&#xff0c;5G RedCap以其低成本、低功耗的特性成为行业焦点。近日&#xff0c;中国移动携手合作伙伴率先完成全球最大规模、最全场景、最全产业的RedCap现网规模试验&#xff0c;推动首批芯片、终端具备商用条件&#xff0c;RedCap端到端产业已全面达到商…

【Vuforia+Unity】AR02-长方体物体识别(Multi Targets)

1.创建模型 选择多维长方体图&#xff0c;这个长方体是生活中的真实物体的拍摄图&#xff0c;提前把6个面拍摄好并裁剪干净。 官网创建模型https://developer.vuforia.com/targetmanager/project/targets?projectId0ddbb5c17e7f4bf090834650bbea4995&avfalse 设置长宽高…

状态模式:灵活应对对象行为变化,实现状态驱动的智能设计

文章目录 **一、技术背景与应用场景****为何使用状态模式&#xff1f;****典型应用场景包括但不限于&#xff1a;** **二、状态模式定义与结构****三、使用步骤举例****四、优缺点分析****总结** 一、技术背景与应用场景 状态模式是一种行为设计模式&#xff0c;用于处理一个对…