【问题标题】:How do I read in FILE contents in QML?如何在 QML 中读取 FILE 内容?
【发布时间】:2011-10-14 21:56:26
【问题描述】:

我只需要类似于 Fstream 的东西来读取 QML 中的文件 IO。为什么没有文件IO?

【问题讨论】:

    标签: qt qml qt-quick


    【解决方案1】:

    如果您的文件是纯文本,您可以使用 XMLHttpRequest。例如:

    var xhr = new XMLHttpRequest;
    xhr.open("GET", "mydir/myfile.txt");
    xhr.onreadystatechange = function() {
        if (xhr.readyState == XMLHttpRequest.DONE) {
            var response = xhr.responseText;
            // use file contents as required
        }
    };
    xhr.send();
    

    【讨论】:

      【解决方案2】:

      我知道这是个老问题,但您可能仍然有兴趣回答。 这里是:Reading a line from a .txt or .csv file in qml (Qt Quick)

      简而言之,您在这里解释了如何在 QML 中读取文件:http://www.developer.nokia.com/Community/Wiki/Reading_and_writing_files_in_QML

      您只需要使用 C++ 扩展 QML。

      【讨论】:

      • 链接的解决方案涉及用 C++ 读取它并将其提供给 QML - 它不是仅使用 QML 和 Qt Javascript 引擎的解决方案。
      【解决方案3】:

      QML 没有内置的文件 I/O。但是 - 从你的帖子的语气来看 - 你已经知道了。

      如何在 QML 中读取 FILE 内容?

      您可以使用 C++ 扩展 QML 的功能。

      Qt 参考文档中的Getting Started Programming with QML 教程向您展示了如何构建文本编辑器。这包括使用 C++ 的文件 I/O。

      为什么没有文件 I/O?

      因为 QML 是基于 JavaScript 的,而 JavaScript 也没有内置的文件 I/O。

      QML 被设计为一种(简单的)构建用户界面的方法。您需要一个实际的程序来完成剩下的工作。

      【讨论】:

        【解决方案4】:

        Felgo SDK(以前称为 V-Play)FileUtils 为 QML 提供了内置文件 I/O。它可以在桌面、iOS 和 Android 上跨平台运行。更多信息和示例也在latest blog post

        看起来像这样:

        var documentsData = fileUtils.readFile("subfolder/file.json")
        

        【讨论】:

          【解决方案5】:
          function readConfigFile() {
              var xhr = new XMLHttpRequest;
              var configaddress = "File:///" + root + "/webconfig.txt" //root = "c:/folder/file.ini";
              console.log(configaddress);
              xhr.open("GET", configaddress);
              xhr.onreadystatechange = function() {
                  if (xhr.readyState == XMLHttpRequest.DONE) {
                      var response = xhr.responseText;
                      var js = JSON.parse(response)
                      if (js.address != "") {
                          service_address = js.address
                      }
                      // use file contents as required
                  }
              };
              xhr.send();
          }
          

          【讨论】:

            【解决方案6】:

            您要读取文件的目的是什么?...如果它的数据很简单...那么您最好使用 QML 离线存储 API。 Look for that section here.

            如果您想为您的应用程序部署一个数据库,请阅读this conversation

            如果您仍然真的想阅读该文件,请学习 C++ 并将您的代码公开给 QML。那么,这超出了我的回答范围。

            【讨论】:

              猜你喜欢
              • 2020-09-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-04-24
              • 1970-01-01
              相关资源
              最近更新 更多