QSettings使用示例

news2024/11/18 14:52:48

解决的问题:

平常要存储一些临时数据,或者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);
}

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

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

相关文章

京东数据分析|京东销售数据怎么查|京东销售数据查询软件分享!

京东销售数据分析对商家来说具有多方面的重要作用&#xff0c;主要体现在以下几个方面&#xff1a; 市场趋势分析&#xff1a; 分析京东平台上的商品销量、销售额和价格走势等数据&#xff0c;可以帮助商家了解当前市场的整体需求趋势&#xff0c;以及不同品类的季节性变化、…

PLC为什么要开发网口通讯功能

PLC设置网口通讯功能&#xff0c;是现场总线向工业以太网的迈进&#xff0c;更是为了在网口之上构建更为庞大、开放的大一统的生态系统。 有了以太网&#xff0c;特别是TCP/IP协议后&#xff0c;全员工控人的日常工作更为便利了。 主要体现在以下4点&#xff1a; 1.再也不需要…

01VScode开发stm32环境搭建

title: VScode开发stm32环境搭建 tags: STM32vscode 1.准备工作 1.下载并安装VSCODE 在百度上搜索vscode记住一定要是官方的 不然你自己就是在给自己下毒2345全来了 打红圈一定要有不然就是在垃圾网站上下的 VSCode下载链接 选一个适合你的      安装正常流程走就行不再…

团簇束流沉积技术:氢气传感器守护安全与环境的利器

在当今日益增长的能源需求背景下&#xff0c;氢气作为一种清洁、高效的能源载体&#xff0c;正逐渐受到广泛关注。然而&#xff0c;氢气的易燃易爆特性也带来了不小的安全隐患。因此&#xff0c;精确、快速地监测氢气泄漏成为了确保生产安全和环境监测的重中之重。基于团簇束流…

一些可以参考的文档集合16

之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合4_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合5…

[C#]winform基于opencvsharp结合pairlie算法实现低光图像增强黑暗图片变亮变清晰

【低光图像增强介绍】 在图像处理领域&#xff0c;低光图像增强是一个具有挑战性的任务。由于光线不足&#xff0c;这些图像往往呈现出低对比度、高噪声和细节丢失等问题&#xff0c;严重影响了图像的视觉效果和后续分析的准确性。因此&#xff0c;开发有效的低光图像增强方法…

无刷电机的2种电流采样方式以及优缺点比较

低端电流采样&#xff1a; 在低端采样方式中&#xff0c;电流检测电阻&#xff08;分流电阻&#xff09;通常被放置在逆变器下桥臂MOSFET或IGBT的低端&#xff0c;即靠近电机绕组的地线侧。这种情况下&#xff0c;只有当对应相位的下管导通时&#xff0c;才能通过这个电阻来测量…

命令绕过 [安洵杯 2019]easy_web1

打开题目 打开题目在URL处看到cmd&#xff0c;本能的直接用系统命令ls 发现被过滤了。又注意到imgTXpVek5UTTFNbVUzTURabE5qYz0似乎是一串base64 拿去base64解码 再hex解码一次得到555.png 再将其hex加密 base64加密 反向推出index.php的payload:?imgTmprMlJUWTBOalUzT0RK…

猫毛过敏却想养猫时?如何缓解猫毛过敏?宠物空气净化器推荐

作为一个新养猫的主人&#xff0c;一开始并没有发现对猫咪过敏。直到养了半年才意识到这个问题&#xff0c;而此时我已经和猫咪有了深厚的感情。我不想放弃我的猫咪&#xff0c;但是留着它的话&#xff0c;我经常会因为流眼泪、打喷嚏、眼睛发红等过敏症状而影响日常生活&#…

RabbitMQ-消息队列:发布确认高级

18、发布确认高级 在生产环境中由于一些不明原因&#xff0c;导致 RabbitMQ 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投…

LiveQing视频点播流媒体RTMP推流服务功能-支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务

LiveQing视频点播流媒体RTMP推流服务功能支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、验证HTTPS服务3、为什么要开启HTTPS3.1、安全性要求…

HTML+CSS:动态搜索框

效果演示 这段代码实现了一个简单的搜索栏效果。页面背景为从天蓝色到深蓝色的渐变色&#xff0c;搜索栏包括一个圆形背景的搜索图标和一个输入框。当用户点击搜索图标时&#xff0c;输入框会从搜索图标的位置滑出&#xff0c;显示一个输入框和一个清除按钮。用户可以在输入框中…

【JAVA】Tomcat的安装

目录 官网链接 下载安装程序 解压 启动Tomcat 问题 其他文件介绍 官网链接 Apache Tomcat - Welcome!https://tomcat.apache.org/ 下载安装程序 进入官网后&#xff0c;点击如下tomcat 8: 进入tomcat 8后选择zip文件下载 解压 Tomcat是一个基于java实现的“绿色软件…

八、线性代数二 ,矩阵的秩

目录 1、矩阵子式的定义与子式个数的计算&#xff1a; 2、矩阵秩的定义&#xff1a; 3、矩阵秩的计算方法&#xff1a; 4、矩阵秩的 性质&#xff1a; 线性代数四——几个重要的矩阵点积_线性代数 矩阵点积-CSDN博客 1、矩阵子式的定义与子式个数的计算&#xff1a; 概念&…

【数学建模规则】2024年第九届数维杯大学生数学建模挑战赛参赛指南

一、竞赛介绍 数维杯大学生数学建模挑战赛每年分为两场&#xff0c;每年上半年为数维杯国赛&#xff08;5月&#xff0c;俗称小国赛&#xff09;&#xff0c;下半年为数维杯国际赛(11月)&#xff0c;2023年第八届数维杯大学生数学建模挑战赛共有近1.4万名学生参赛&#xff0c;…

vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。

解决方法&#xff1a; 打开PowerShell&#xff0c;在命令框输入set-ExecutionPolicy RemoteSigned 在PowerShell中输入会出现如下图&#xff0c;输入y即可。

【Flink精讲】Flink组件通信

主要指三个进程中的通讯 CliFrontendYarnJobClusterEntrypointTaskExecutorRunner Flink内部节点之间的通讯使用Akka&#xff0c;比如JobManager和TaskManager之间。而operator之间的数据传输是利用Netty。 RPC是统称&#xff0c;Akka&#xff0c;Netty是实现 Akka与Ac…

网络编程 TCP/UDP通信

网络编程 TCP/UDP通信 1. 0.0.0.0地址与客户端bind函数2. UDP 服务器与客户端通信3. TCP 服务器与客户端通信 1. 0.0.0.0地址与客户端bind函数 0.0.0.0的地址作用 在网络编程中&#xff0c;0.0.0.0是一个特殊的IP地址&#xff0c;通常用于表示"任意地址"或"所有…

Linux:ACL权限,特殊位和隐藏属性

目录 一.什么是ACL 二.操作步骤 ① 添加测试目录、用户、组&#xff0c;并将用户添加到组 ② 修改目录的所有者和所属组 ③ 设定权限 ④ 为临时用户分配权限 ⑤ 验证acl权限 ⑥ 控制组的acl权限 三. 删除ACL权限 一.什么是ACL 访问控制列表 (Access Control List):ACL 通…

面试经典150题——快乐数

​"Success is not final, failure is not fatal: It is the courage to continue that counts." - Winston Churchill 1. 题目描述 2. 题目分析与解析 2.1 思路一 还是最简单的&#xff0c;模拟最直观的思路&#xff0c;就是进行一个while循环。比如&#xff1a;…