Qt文件和json

隔壁老王
• 阅读 1956

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

点赞
收藏
评论区
推荐文章
隔壁老王 隔壁老王
2年前
Qt使用QSocket做tcp简单客户端
首先要在工程文件.por中添加network添加新文件在头文件中导入qtcpsocket之后定义成员函数用于发送和接收数据Qt封装的socket使用的是信号槽监听接收到的数据所以需要添加监听使用的传输格式报文长度8字节字符串base64转码的json报文头文件cppifndefTCPSOCKETHdefineTCPSOCKETHinclude<Q
隔壁老王 隔壁老王
2年前
Qt制作简单的无边框登陆窗口
使用qt做简单的登录窗口环境:win10Qt5创建项目:选择Widget类勾选ui界面因为我是用的默认类名所以类名是Widget以下是Widget.hcifndefWIDGETHdefineWIDGETHinclude<QWidgetnamespaceUiclassWidget;classWidget:publicQWidg
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
报错信息:最近打开下载的Excel,会报如下错误。(xls格式不受影响)!(https://oscimg.oschina.net/oscnet/2b6f0c8d7f97368d095d9f0c96bcb36d410.png)!(https://oscimg.oschina.net/oscnet/fe1a8000d00cec3c
Stella981 Stella981
2年前
Qt5安装及组件选择(Qt 5.12.0)
组件选择如下图所示,安装Qt时有选择组件这一步,全部安装未免太占磁盘控件,只需安装我们所需要的组件即可。接下来就分析分析各个组件的作用及含义。!(https://oscimg.oschina.net/oscnet/f428e1aad0ebfcc43108b36f5f67a03de85.png)“Qt5.12.0”节点下面是Qt
Stella981 Stella981
2年前
Linux查看GPU信息和使用情况
1、Linux查看显卡信息:lspci|grepivga2、使用nvidiaGPU可以:lspci|grepinvidia!(https://oscimg.oschina.net/oscnet/36e7c7382fa9fe49068e7e5f8825bc67a17.png)前边的序号"00:0f.0"是显卡的代
Stella981 Stella981
2年前
Qt类库介绍
QT类库QT核心特点QT是一个跨平台开发的类库。QT的元对象编译器MOC是一个预处理器,在源程序被编译前先将这些QT特性的程序转为标准的C兼容的形式,然后再有标准的C编译器进行编译。也就是为什么在使用信号和槽的机制的类里,必须添加一个Q\_OBJECT宏的原因,只有添加了这个宏,moc才能对类里的信号与槽代码进
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Nginx反向代理upstream模块介绍
!(https://oscimg.oschina.net/oscnet/1e67c46e359a4d6c8f36b590a372961f.gif)!(https://oscimg.oschina.net/oscnet/819eda5e7de54c23b54b04cfc00d3206.jpg)1.Nginx反
秦朗 秦朗
2个月前
孙老师Qt开发教程
//下仔のke:https://yeziit.cn/13455/Qt开发是指使用Qt这个跨平台的C图形用户界面应用程序框架进行软件开发的过程。Qt提供了一套丰富的类库和工具,使得开发者可以轻松地创建出具有艺术级图形用户界面的应用程序,同时也可以开发出非
隔壁老王
隔壁老王
Lv1
千万程序员队伍中的一员。我住隔壁我姓王,同事们亲切得称呼我隔壁老王
文章
18
粉丝
2
获赞
7