【发布时间】:2021-08-16 16:48:22
【问题描述】:
json文件是这样的。我想在 qml 中为它定义一个类,就像 typescript 中的 interface 关键字一样。
{
"ScannerID": "ID",
"Status": 1,
"SuccessRate": 0.999,
"Result": [{
"Codes": "result_11111",
"Positions": {
"CenterX": 10.0,
"CenterY": 10.0,
"Width": 100.0,
"Height": 100.0,
"Angle": 50
},
"Types": "QrCode"
},
//more items
]
}
我试图在文件ScannerResult.qml中定义一个qml类
import QtQuick 2.4
QtObject {
property string pScannerID
property int pStatus
property real pSuccessRate
// how to define Result with strong type?
property ? pResult
function load(obj) {
pScannerID = obj.ScannerID
//......
}
}
那就用吧
...
ScannerResult {
id: scannerResult
}
function log(jsonstr) {
let obj = JSON.parse(jsonstr);
scannerResult.load(obj)
console.log(scannerResult.pScannerID) // it works
}
...
但是"Result"键下的对象向量很难处理。因为 qml 不允许在 A 类下定义 B 类。
那么有没有人知道如何定义一个强类型类来保存从 json 中解析的对象在 qml 中?然后我可以在 qtcreator 中使用具有自动完成功能的类。
【问题讨论】:
-
“但是'Result'键下的对象向量很难处理。”有什么难的?你的问题到底是什么?
-
@JarMan 这很难,因为 qml 不允许在 A 类下定义 B 类,而我通常在 C++ 中这样做。我的问题是如何定义一个强类型类来保存 qml 中从 json 解析的对象。
-
"qml 不允许在 A 类下定义 B 类"——我不确定这意味着什么。 inline components 会帮助你吗?或者您可以在 A 类之外定义 B 类吗?
-
@JarMan 内联组件似乎无法容纳长度未知的向量。外部定义会使项目过于复杂。不过谢谢你的回复。