【QtJson】用Qt自带的QJson,直接一步到位封装和解析一个类的实例对象!

文章介绍了一种方法,利用Q_PROPERTY宏和QObject的特性,可以实现类到Json字符串的自动封装以及Json字符串对类成员的自动赋值。通过定义Q_PROPERTY,系统能获取变量名和类型,进而实现Json的创建和解析。这种方法简化了Qt中对象和Json数据之间的转换过程。

之前貌似没有看过类似的代码
我们现在的要求就是直接在不知道类成员的情况下,把一个类丢进去就能生成一个Json字符串,也可以把一个字符串和一个类成员丢进去就能根据成员变量名匹配到元素并赋值,大概就这样

中心思想就是Q_PROPERTY宏提供了一个property类型,可以直接通过变量名称获得一个变量名称对应的字符串,比如int a;可以直接获得一个"a"的字符串,而且还可以知道这个a 的类型。并据此来进行字符串的封装和解析。

主要是为了开发方便,就可以直接把一个QObject对象扔进去返回一个字符串,也可以把一个Json字符串和指定类的对象扔进去就直接自动把类中对应的属性修改了,总的来说应该是用点用。

--2023.2.2稍微修改了一下,与原先的使用上会有点区别

#pragma region Example调用实例

//Json相关方法调用实例:
//
// 如果想要调用JsonMaker类来把你的类成员元素,假设是A a,其中包含元素qint32 a1,QString a2,bool a3进行封装,那么你需要使用Q_PROPERTY来
// 声明封装a1,a2,a3元素和其set/get方法(如果需要解析就需要set方法,如果需要封装就需要get方法),set/get方法命名规则为set/get+元素名称
// 比如seta1,geta2,其中不对大小写做规定,也可以写成setA1,getA2
// 
// 调用方法如下:
// 1.封装字符串
// A a; 
// QString result = JsonMaker::Singleton().JsonSerialization<Tester1>(tester);
// 2.解析字符串
// A a
// JsonMaker::Singleton().JsonDeserialization<Tester1>(a, Json);
// 调用完毕后a中的对应数据都会被Json字符串中的数据覆盖
//

//测试解析、封装类举例:
class Tester1 :public QObject {
Q_OBJECT
	Q_PROPERTY(QString name READ getName WRITE setname)
	Q_PROPERTY(QString like READ getLike WRITE setlike)
	Q_PROPERTY(QString birthday READ getBirthday WRITE setbirthday)
	//Q_PROPERTY(QString str_public READ str_public,WRITE setStr_public)
	Q_PROPERTY(QList<QString> list READ getList WRITE setlist)
	Q_PROPERTY(QList<qint32> qint32_list READ getqint32_List WRITE setqint32_list)
	//暂时不支持float类型
	//Q_PROPERTY(QList<float> float_list READ getFloat_List)
	Q_PROPERTY(QList<double> double_list READ getDouble_List WRITE setdouble_list)
	Q_PROPERTY(QList<bool> bln_list READ getBln_List WRITE setbln_list)
	Q_PROPERTY(QList<int> int_list READ getInt_list WRITE setint_list)
public:
	Tester1(QObject* parent = Q_NULLPTR);
	//QString str_public = "str_public";
#pragma region get funcs

QString getName() {
	return name;
}
QString getLike() {
	return like;
}
QString getBirthday() {
	return birthday;
}
QList<QString> getList() {
	return this->list;
}
QList<int> getInt_list() {
	return this->int_list;
}
QList<qint32> getqint32_List() {
	return this->qint32_list;
}
QList<float> getFlost_List() {
	return this->float_list;
}
QList<double> getDouble_List() {
	return this->double_list;
}
QList<bool> getBln_List()
{
	return this->bln_list;
}
QList<float> getFloat_List() {
	return float_l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值