Python中获取数据
添加数据处理类
main_win.py
1 | from PySide2.QtCore import QObject, Signal, Slot |
注入属性
main.py
1 | # This Python file uses the following encoding: utf-8 |
页面中使用
main.qml
1 | import QtQuick 2.15 |
子项要设置宽度和ListView一样,要用ListView.view.width
。
QML中获取数据
main.qml
1 | import QtQuick 2.15 |
接口调用
在 QML 中发送带参数的 POST 请求,可以使用 XMLHttpRequest
或者 Qt.network
模块。
以下是两种方法的详细示例:
QML中 XMLHttpRequest
1 | import QtQuick 2.15 |
说明
xhr.open("POST", "接口URL")
用于初始化 POST 请求。xhr.setRequestHeader("Content-Type", "application/json")
设置请求头的 Content-Type 为 JSON。JSON.stringify
用于将 JavaScript 对象转换为 JSON 字符串。xhr.send(requestBody)
用于发送请求体。
QML使用 Qt.network
模块
1 | import QtQuick 2.15 |
说明
NetworkRequest
的method
属性设置为POST
。header
属性用于设置请求头,例如Content-Type
。body
属性用于设置请求体,这里传递的是一个 JSON 字符串。networkManager.post(networkRequest)
发送 POST 请求。
通过 Python(推荐复杂场景)
如果接口调用逻辑比较复杂,或者需要处理认证、加密等操作,可以通过 Python 后端调用接口,然后将结果传递给 QML。
Python 后端
1 | import sys |
QML 代码
1 | import QtQuick 2.15 |
说明
ApiHandler
是一个 Python 类,用于处理 POST 请求。requests.post
是 Python 的 HTTP 请求库,用于发送 POST 请求。apiResponse
是一个信号,用于将接口返回的数据传递给 QML。Connections
用于监听 Python 后端的信号,并在 QML 中处理返回的数据。
总结
- 方法 1:适合简单的 HTTP POST 请求,直接在 QML 中使用 JavaScript 的
XMLHttpRequest
。 - 方法 2:使用
Qt.network
模块,更符合 QML 的设计风格,推荐使用。 - 方法 3:适合复杂场景,通过 Python 后端调用接口,然后将结果传递给 QML。