【发布时间】:2014-10-06 08:23:04
【问题描述】:
我需要获取 JSON 数据并将其加载到表中。我想我需要一些 C++ 技能。但是我可以用纯 JavaScript 或 QML 来做这件事吗?
【问题讨论】:
-
@sashoalm 认真的!
我需要获取 JSON 数据并将其加载到表中。我想我需要一些 C++ 技能。但是我可以用纯 JavaScript 或 QML 来做这件事吗?
【问题讨论】:
是的,您可以完全使用 QML 中的 javascript API 来完成。以下代码适用于 Qt 5.3.1
import QtQuick 2.0
import QtQuick.Controls 1.2
Item {
width: 300
height: 400
ListModel {
id: model
}
ListView {
id: listview
anchors.fill: parent
model: model
delegate: Text {
text: listdata
}
}
function getData() {
var xmlhttp = new XMLHttpRequest();
var url = "http://www.w3schools.com/website/Customers_MYSQL.php";
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200) {
myFunction(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function myFunction(response) {
var arr = JSON.parse(response);
for(var i = 0; i < arr.length; i++) {
listview.model.append( {listdata: arr[i].Name +" "+ arr[i].City +" "+ arr[i].Country })
}
}
Button {
anchors.bottom: parent.bottom
width: parent.width
text: "Get Data"
onClicked: getData()
}
}
【讨论】:
如果您将纯 QML JSONListModel 添加到您的项目中,您可以使用 View-Model 模式的全部功能。但是,它不支持在数据完全下载之前呈现数据。
【讨论】:
您可以在 C++ 中轻松做到这一点,因为 Qt5 具有对 JSON 的原生支持。检查示例的以下答案:
【讨论】: