❝Qml不用依赖C 的实现,使用js的XMLHttpRequest对象实现读写文件的功能。❞
先看下面的实现例子(读取Qt资源文件main.qml
文件并显示到Text控件中):
// main.qml
import QtQuick 2.0
import "qrc:/file.js" as File
Rectangle {
id: root
width: 480
height: 320
Text {
anchors.fill: parent
Component.onCompleted: {
/* 读取Qt资源文件中的main.qml文件内容到Text控件 */
text = File.read("qrc:/main.qml")
/* 如需要读取某个路径文件则可以这样写:file:///C:/Users/My/Demo.qml */
/* 写内容到example.txt中 */
File.write("example.txt", "Hello qthub.com")
}
}
}
file.js
文件内容:
// file.js
function read(file) {
var request = new XMLHttpRequest();
request.open("GET", file, false); // false为同步操作设置
request.send(null);
return request.responseText;
}
function write(file, text) {
var request = new XMLHttpRequest();
request.open("PUT", file, false); // false为同步操作设置
request.send(text);
return request.status;
}
从file.js
文件中看到读写函数的实现,关键的地方在于XMLHttpRequest
对象。
XMLHttpRequest请求特定的url,可以用于获取任何类型的数据,而不仅仅是XML。它甚至支持HTTP以外的协议,比如file://
和FTP
。另外,在浏览器中使用可能出于安全等原因的功能会受到限制。
既然XMLHttpRequest支持file://
协议(本地文件传输协议)那么就可以用它来读写文件了。
关于更多
- 2019-12-20期公众号推文《QML文件读写控件(预览版)》
XMLHttpRequest
说明文档:
https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest