本地文件(Local files)

使用XMLHttpRequest也可以加载本地文件(XML/JSON)。例如加载一个本地名为“colors.json”的文件可以这样使用:

  1. xhr.open("GET", "colors.json");

我们使用它读取一个颜色表并且使用表格来显示。从QtQuick这边无法修改文件。为了将源数据存储回去,我们需要一个基于HTTP服务器的REST服务支持或者一个用来访问文件的QtQuick扩展。

  1. import QtQuick 2.0
  2. Rectangle {
  3. width: 360
  4. height: 360
  5. color: '#000'
  6. GridView {
  7. id: view
  8. anchors.fill: parent
  9. cellWidth: width/4
  10. cellHeight: cellWidth
  11. delegate: Rectangle {
  12. width: view.cellWidth
  13. height: view.cellHeight
  14. color: modelData.value
  15. }
  16. }
  17. function request() {
  18. var xhr = new XMLHttpRequest();
  19. xhr.onreadystatechange = function() {
  20. if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
  21. print('HEADERS_RECEIVED')
  22. } else if(xhr.readyState === XMLHttpRequest.DONE) {
  23. print('DONE');
  24. var obj = JSON.parse(xhr.responseText.toString());
  25. view.model = obj.colors
  26. }
  27. }
  28. xhr.open("GET", "colors.json");
  29. xhr.send();
  30. }
  31. Component.onCompleted: {
  32. request()
  33. }
  34. }

也可以使用XmlListModel来替代XMLHttpRequest访问本地文件。

  1. import QtQuick.XmlListModel 2.0
  2. XmlListModel {
  3. source: "http://localhost:8080/colors.xml"
  4. query: "/colors"
  5. XmlRole { name: 'color'; query: 'name/string()' }
  6. XmlRole { name: 'value'; query: 'value/string()' }
  7. }

XmlListModel只能用来读取XML文件,不能读取JSON文件。