为结构体写一个宏,实现自动创建返回QVariantMap类型

张开发
2026/4/3 15:54:06 15 分钟阅读
为结构体写一个宏,实现自动创建返回QVariantMap类型
为结构体写一个宏实现自动创建返回QVariantMap类型我在写qml和c数据交互的时候发现需要创建很多的结构体用来保存qml界面上的数据这些结构体都需要实现将类容转换成QVariantMap类型在之前有看过JSON与结构体相互转换的代码就想着仿照写一个转成QVariantMap的宏。代码如下#includeQVariantMapinlinevoidgeneratMap(QVariantMap,constchar*){}templatetypenameT,typename...ArgsinlinevoidgeneratMap(QVariantMapjvData,constchar*name,constTvalue,Args...args){constchar*commastrchr(name,,);if(comma){QString keyQString::fromLatin1(name,comma-name).trimmed();jvData[key]value;// 自动转 QVariantgeneratMap(jvData,comma1,std::forwardArgs(args)...);}else{QString keyQString(name).trimmed();jvData[key]value;}}#defineSTRINGIFY(...)#__VA_ARGS__#defineADD_JS_MEMBER(...)\QVariantMaptoVariantMap()const{\QVariantMap map;\generatMap(map,STRINGIFY(__VA_ARGS__),__VA_ARGS__);\returnmap;\}注意需要c版本为c11以上支持…可变参数

更多文章