如何使用Qt-QML与V-Player来获取REST服务:天气服务示例

原文链接REST与RESTful web services是从网络获取数据的最常用的方法。 Qt和V-Player提供了简单的方法来通过REST来获取数据。 这篇文章将告诉你创建App与连接到REST服务的重要步骤。另外,也将会提供一些有用的代码。Spoiler:V-Player简单的REST例子在我们进入到创建整个示例App的细节之前,让我们先看一个小型App的代码。 函数#g...
摘要由CSDN通过智能技术生成

原文链接

REST与RESTful web services是从网络获取数据的最常用的方法。
Qt和V-Player提供了简单的方法来通过REST来获取数据。
这篇文章将告诉你创建App与连接到REST服务的重要步骤。另外,也将会提供一些有用的代码。

Spoiler:V-Player简单的REST例子

在我们进入到创建整个示例App的细节之前,让我们先看一个小型App的代码。
函数#getIp()展示了一个对REST service基础请求的函数的样子–使用XMLHttpRequest

import VPlayApps 1.0
import QtQuick 2.0
App {
  // This signal handler is called when the app is created, like a constructor
  //这个信号处理器当App启动时被调用,就像一个构造函数一样。
  Component.onCompleted: getIp()

  NavigationStack {
    Page {
      AppText {
        id: ipText
        anchors.centerIn: parent
      }
    }
  }
  function getIp() {
   
    // Create the XMLHttpRequest object
    // 创建XMLHttpRequest对象
    var xhr = new XMLHttpRequest

    // Listen to the readyStateChanged signal
    // 监听readyStateChanged信号
    xhr.onreadystatechange = function() {
   
      // If the state changed to DONE, we can parse the response
      // 如果状态变为DONE,我们可以开始解析服务器的回应
      if (xhr.readyState === XMLHttpRequest.DONE) {
        // The responseText looks like this {"ip":"xxx.xxx.xxx.xxx"}
        // Parse the responseText string to JSON format
        // 服务器的回应文本像是这样{"ip":"xxx.xxx.xxx.xxx"}
        // 将回应文本解析成JSON
        var responseJSON = JSON.parse(xhr.responseText)
        // Read the ip property of the response
        // 从重度去ip属性
        var ip = responseJSON.ip
        // Display the ip in the AppText item
        // 在AppText中显示ip
        ipText.text = "IP: " + ip
      }
    }

    // Define the target of your request
    // 设置你的请求方式及服务器地址
    xhr.open("GET", "https://api.ipify.org?format=json")
    // Execute the request
    // 执行请求
    xhr.send()
  }
}

真实的简单项目

我们将构建一个现实中有用的Qt 程序。它将获取网络上最流行之一的天气服务。当然,这也很容易将它适配到其他的REST service:因为处理的过程是一样的。你只需要改变一个服务器地址并且正确的解析返回数据。
这里写图片描述
示例代码在这里

程序结构

这个程序包含两个文件:
- **Main.qml:包含UI和REST的逻辑
- **DataModel.qml:存储并缓存从REST service获取并解析后的数据
这里写图片描述

REST 客户端的基本UI

首先,我们创建一个用户界面:在“Main.qml”中的QML元素。我们使用了V-Play APIs。他们适配了各种平台的风格(桌面,Android,IOS)。以下三个元素经常在每一个Qt/QML程序中出现:
1. App 组件通常是QML文件中的顶层元素。他在标准的Qt类中添加了有多有用的布局。两个机制非常重要。
设备无关像素(Device-independent pixels)简称为dp,是为长短定制的单位,缩放无关像素(scale-independent pixels)简称为sp,是为字体定制的单位。
2. 最开始的时候,我们的REST客户端程序只有一个页面。但添加一个NavigationStack元素作为他的孩子也是一个好主意。
后面他可以处理前方详细页面的转跳。而目前呢,NavigationStack确保顶部导航栏是可见的。
3. 第三个item是Page。他是我们自动标题栏和可见的QML元素的容器。设备相关的主题由它自动处理。

可视的UI

在通用的UI元素之后,我们应该定制一个程序相关的专门的洁面。用户在SearchBar输入城市名称。下面的AppText元素将显示解析到的数据或者错误信息。

QML页面布局

我们将垂直地安放UI元素。QM的ColumnLayout在这个场景是很棒的选择。他的说明文档很短,可以简单的认为他是只有一列的GridLayout。
QML还提供了另一个,乍一看非常像ColumnLayout的类:Column。这两者有什么区别呢?
- Column是一个位置指示器(Positioner),他是固定的形式安放QML元素(比如放在谁的下面)。Column的孩子节点࿰

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值