【问题标题】:Can I use JavaScript to get JSON data from the server inside my qt app?我可以使用 JavaScript 从我的 qt 应用程序中的服务器获取 JSON 数据吗?
【发布时间】:2014-10-06 08:23:04
【问题描述】:

我需要获取 JSON 数据并将其加载到表中。我想我需要一些 C++ 技能。但是我可以用纯 JavaScript 或 QML 来做这件事吗?

【问题讨论】:

  • @sashoalm 认真的!

标签: qt qml


【解决方案1】:

是的,您可以完全使用 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()
    }
}   

【讨论】:

  • 谢谢。它有很大帮助。请编辑您的答案。您的代码的某些部分未标记为代码。
  • 我实际上已经在代码标签内添加了代码,但它的格式不正确。谢谢。
  • 您可以通过在编辑器中添加一个 4 间隔的制表符设置并在整个代码之前添加一个额外的制表符来轻松格式化它,然后将其复制粘贴到此处,就像我刚才所做的那样
  • 谢谢islahul,下次我会记住的。我是这里的新手:)
  • 缺点是javascript部分不会被原生编译,所以从安全角度来看并不好。如果是重要的事情。
【解决方案2】:

如果您将纯 QML JSONListModel 添加到您的项目中,您可以使用 View-Model 模式的全部功能。但是,它不支持在数据完全下载之前呈现数据。

【讨论】:

    【解决方案3】:

    您可以在 C++ 中轻松做到这一点,因为 Qt5 具有对 JSON 的原生支持。检查示例的以下答案:

    How to create/read/write JSon files in Qt5

    【讨论】:

    • 如果您更仔细地阅读这个问题,您就会明白我想要一个 javascript/qml 解决方案而不是 C++ 解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多