【发布时间】:2014-04-23 05:02:16
【问题描述】:
我正在制作带有 Qt 树视图和 Qt Json 支持的 Json 格式数据编辑器。 我想将 QJsonObject 或 QJsonArray 引用参数传递给函数。
这行得通:
void makeJsonData(QJsonObject &obj) {
obj.insert("key", 1234);
}
//call makeJsonData()
QJsonObject jobj;
makeJsonData(jobj);
int keysize = jobj.keys().size(); //1, OK.
但不是这样:
//QJsonValue, because it can handle both QJsonObject and QJsonArray
void makeJsonData(QJsonValue &obj) {
obj.toObject().insert("key", 1234); //obj is QJsonObject
}
//call makeJsonData()
QJsonObject jobj;
makeJsonData(QJsonValue::fromVariant(jobj)); //fromVariant() to cast QJsonObject to QJsonValue
int keysize = jobj.keys().size(); //0, Fail.
看起来 QJsonValue::toObject() 只是复制参数.. 如何使用一种参数类型同时引用 QJsonObject 和 QJsonArray?
【问题讨论】:
-
在
QJsonObject和QJsonArray的方法中使用void*作为参数类型和dynamic_cast<>将起作用(如果你转换为指针类型,它会在转换失败时返回null) ...它有点(准备好:非常非常)脏,因为您必须完全处理错误类型的传递,但是您可以同时传递QJsonValue和QJsonArray而无需进行.toObject()调用. -
@LosFrijoles 感谢您的快速回复!