Qt文件和json

隔壁老王
• 阅读 1715

qt中创建普通c++类

Qt文件和json

头文件

#ifndef OPERATION_H
#define OPERATION_H

#include <QFile>
// 默认配置文件路径
const QString FilePath = "./config.json";

typedef struct FileConfig {
    QString ip;
    QString port;
    QString username;
    QString password;
    QString filepath;
    bool    is_save_pwd;
}fileConfig;
// 判断目录是否存在
bool isFile(const QString file=FilePath);

// 饿汉模式单例
class FileOperation
{
public:
    void writeConfig(fileConfig config);
    bool readConif(fileConfig* config);

    static FileOperation* getInstance()
    {
        return pSingleton;
    }
private:
    static FileOperation *pSingleton;
    FileOperation(){}
    ~FileOperation(){}
    FileOperation(FileOperation&){}
};

#endif // OPERATION_H

源文件

// 在头文件初始化会出现重复定义?
FileOperation* FileOperation::pSingleton = new FileOperation;

void FileOperation::writeConfig(fileConfig config)
{
    // 保存写入数据
    QJsonObject obj;
    obj.insert("IP", config.ip);
    obj.insert("PORT", config.port);
    obj.insert("USERNAME", config.username);
    obj.insert("PASSWORD", config.password);
    obj.insert("FILEPATH", FilePath);
    obj.insert("IS_SAVE", config.is_save_pwd);
    QJsonDocument doc(obj);
    QByteArray json = doc.toJson();
    QFile file(FilePath);
    file.open(QIODevice::WriteOnly | QIODevice::Text);
    file.write(json.data(), json.size());
    file.close();
}

bool FileOperation::readConif(fileConfig* config)
{
    if(isFile())
    {
        QFile file(FilePath);
        file.open(QIODevice::ReadOnly | QIODevice::Text);
        QByteArray data = file.readAll();
        file.close();
        QJsonDocument doc = QJsonDocument::fromJson(data);
        QJsonObject obj = doc.object();
        config->ip = obj.value("IP").toString();
        config->port = obj.value("PORT").toString();
        config->username = obj.value("USERNAME").toString();
        config->password = obj.value("PASSWORD").toString();
        config->filepath = obj.value("FILEPATH").toString();
        config->is_save_pwd = obj.value("IS_SAVE").toBool();
        return true;
    }
    return false;
}



bool isFile(const QString file)
{
    return QFile::exists(file);
}

完整代码在码云上持续更新中。。

https://gitee.com/YiZhiLuGuoDeXiaoMaNong/personnel-management

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
5个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
隔壁老王 隔壁老王
1年前
Qt简单使用表格
接在Qt简单登录后https://www.helloworld.net/p/4enJFnZUQAC8G添加新文件使用的组件tableweight和tableview头文件cifndefMANAGEMENTHdefineMANAGEMENTHinclude<QWidgetinclude<QMouseEventnamespaceUicl
隔壁老王 隔壁老王
1年前
Qt使用QSocket做tcp简单客户端
首先要在工程文件.por中添加network添加新文件在头文件中导入qtcpsocket之后定义成员函数用于发送和接收数据Qt封装的socket使用的是信号槽监听接收到的数据所以需要添加监听使用的传输格式报文长度8字节字符串base64转码的json报文头文件cppifndefTCPSOCKETHdefineTCPSOCKETHinclude<Q
技术小男生 技术小男生
5个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
Stella981 Stella981
1年前
Clion+Cmake+Qt5+Qwt+msys2+MinGW在Windows下的安装配置使用教程
摘要:CLion,acrossplatformC/CIDE.本文主要介绍基于Clion作为IDE,MinGW作为编译器,CMake作为项目构建工具,开发基于Qt5、qwt的C图形GUI项目的安装、配置、编译过程。KeyWords:Clion;Cmake;Qt5;Qwt;msys2;MinGW;Windows目
Stella981 Stella981
1年前
C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
报错信息:最近打开下载的Excel,会报如下错误。(xls格式不受影响)!(https://oscimg.oschina.net/oscnet/2b6f0c8d7f97368d095d9f0c96bcb36d410.png)!(https://oscimg.oschina.net/oscnet/fe1a8000d00cec3c
Stella981 Stella981
1年前
Qt类库介绍
QT类库QT核心特点QT是一个跨平台开发的类库。QT的元对象编译器MOC是一个预处理器,在源程序被编译前先将这些QT特性的程序转为标准的C兼容的形式,然后再有标准的C编译器进行编译。也就是为什么在使用信号和槽的机制的类里,必须添加一个Q\_OBJECT宏的原因,只有添加了这个宏,moc才能对类里的信号与槽代码进
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
JNI使用方式
作用:使Java能够同C/C动态库(dll)进行交互。编写过程:    1、native接口类,其中方法用native修饰,没有方法体。    2、通过javah命令编译native接口类,会生成.h的头文件。    3、用C编写一个dll文件        (1)需要引入刚生成的.h头文件        (2)实现头文件
Stella981 Stella981
1年前
Nginx反向代理upstream模块介绍
!(https://oscimg.oschina.net/oscnet/1e67c46e359a4d6c8f36b590a372961f.gif)!(https://oscimg.oschina.net/oscnet/819eda5e7de54c23b54b04cfc00d3206.jpg)1.Nginx反
隔壁老王
隔壁老王
Lv1
千万程序员队伍中的一员。我住隔壁我姓王,同事们亲切得称呼我隔壁老王
17
文章
2
粉丝
7
获赞