**需求描述:**在实际开发中,以JSON格式保存数据,作为配置文件,供程序使用。为实现可视化,方便修改文件,现需要将JSON文件中的内容读取出来,分别放到界面中(放在lineEdit中)修改,保存。
**1. 拖拽组件。**如下所示:3个按钮,3个lineEdit组件,2个标签
2.为按钮关联槽函数。
widget.cpp文件内容如下:
#include "widget.h"
#include "ui_widget.h"
#include<QJsonDocument>
#include<QJsonObject>
#include<QJsonArray>
#include<QFile>
#include<QDebug>
#include<QFileDialog>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_choice_btn_clicked()
{
QString path=QFileDialog::getOpenFileName(this,"打开文件","E:\\Qt_Code\\Json_Test\\test.json");
//将路径放到lineEdit中
ui->path_Edit->setText(path);
//-------------------------------------
QFile file("E:\\Qt_Code\\Json_Test\\test.json");
file.open(QIODevice::ReadOnly);
QByteArray data=file.readAll();
// file.close(); //关闭文件
//使用json文件对象加载字符串
QJsonDocument doc=QJsonDocument::fromJson(data);
// QJsonParseError jsonError;
//判断是否对象
if(doc.isObject())
{
//把json文档转换为json对象
QJsonObject obj=doc.object();
if(obj.contains("ip"))
{//包含指定的key
QJsonValue valObj=obj.value("ip");
QString ip= valObj.toString();
qDebug() << "ip : " << ip;
ui->ip_Edit->setText(ip);
}
if(obj.contains("port"))
{
QJsonValue valObj=obj.value("port");
QString port= valObj.toString();
qDebug() << "port : " << port;
ui->port_Edit->setText(port);
}
}
file.close(); //关闭文件
}
void Widget::on_save_btn_clicked()
{
QString ip=ui->ip_Edit->text();
QString port=ui->port_Edit->text();
//创建json对象
// QJsonObject obj;
QJsonObject sub;
sub.insert("ip",QJsonValue(ip));
sub.insert("port",QJsonValue(port));
// obj.insert("server",QJsonValue(sub));
//内存中的数据写到文件
QJsonDocument doc(sub);
//将json对象转换成字符串
QByteArray data=doc.toJson();
QFile file("E:\\Qt_Code\\Json_Test\\test.json");
file.open(QIODevice::WriteOnly);
file.write(data);
file.close();
}