800|4

224

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【STM32MP135F-DK】9-网络测评,用QT显示网络天气 [复制链接]

本帖最后由 qiao--- 于 2024-1-4 18:03 编辑

我们在之前已经成功移植了qt,现在可以进行qt界面的开发,本次测评我打算测试一下板子的网络功能,而测评的主要方式就是利用网上的api获取网络天气,最终在qt上显示。

 

1.在网上找一个可以获取天气的api

我用的是下面这个链接http://query.asilu.com/weather/baidu/,当我们进入这个链接的时候,会显示一系列的JSON数据,如下图,而我们要做的就是解析下面的这个JSON数据

  2.创建qt工程

我们打开Linux虚拟机下面的qtCreator,工程创建模式按照我之前的测评就可以【STM32MP135F-DK】7-部署QT开发环境+运行第一个QT程序 https://bbs.eeworld.com.cn/thread-1267168-1-1.html

我们在.pro文件下加入network,这个可以加入一些网络的库。

 

接着我们构建一个简单的界面,我是直接拖用qtCreator现有的图形库,我用的是如下的布局。记着要设置窗口的大小要为480*272,这个在我之前的测评也有讲过,我这里就不在赘述。

 

然后在widget.h中添加以下的代码(我这里就把所有的代码展示了)

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtNetwork>//网络类
#include <QNetworkAccessManager>//网络管理类
//Json数据类
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots: //槽函数
    void slot_http(QNetworkReply* reply);//网络连接
    void slot_pushButton_consult();//查询按钮

private:
    Ui::Widget *ui;
    QNetworkAccessManager* http;
};
#endif // WIDGET_H

在widget.cpp中添加下面的代码,这里主要是用了一些函数对JSON数据进行了解析。

#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    http = new QNetworkAccessManager;
    http->get(QNetworkRequest(QUrl(QString("http://query.asilu.com/weather/baidu/?city=%1").arg(ui->comboBox_city->currentText()))));//连接天气网站
    connect(http,SIGNAL(finished(QNetworkReply*)),this,SLOT(slot_http(QNetworkReply *)));//调用槽函数

}

Widget::~Widget()
{
    delete ui;
}
void Widget::slot_http(QNetworkReply *reply)
{
    QByteArray Data = reply->readAll();
    QJsonDocument JsonDocument = QJsonDocument::fromJson(Data);
    QJsonObject JsonObject = JsonDocument.object();
    QString City = JsonObject["city"].toString();
    ui->textEdit->setText("");
    for(int i = 0;i < 7;++i)
    {
        QString date = JsonObject["weather"].toArray()[i].toObject()["date"].toString();
        QString weather = JsonObject["weather"].toArray()[i].toObject()["weather"].toString();
        QString temp = JsonObject["weather"].toArray()[i].toObject()["temp"].toString();
        QString wind = JsonObject["weather"].toArray()[i].toObject()["wind"].toString();
        ui->textEdit->append(date+"  "+weather+"  "+temp+"  "+wind);
    }
}

void Widget::slot_pushButton_consult()
{
    http->get(QNetworkRequest(QUrl(QString("http://query.asilu.com/weather/baidu/?city=%1").arg(ui->comboBox_city->currentText()))));
}


我们可以在电脑上先预览一下效果在移植到板子上。

 

3.编译并移植到板子上看看效果

我们用qmake && make编译我们的工程,并拷贝到我们的板子上用scp命令拷贝就行,我在终端执行我的qt可执行文件就在屏幕上出现了以下效果

 

我这里只添加了四个直辖市的天气,有兴趣的小伙伴可以把所有的城市都实现出来。

 

 

总结:开发板通过api获取网络天气可以准确的获取到网络中的数据,网络连接的稳定性较好,数据传输也很准确。

此帖出自stm32/stm8论坛

最新回复

有点windows2000的感觉,感觉美工上场设计几个图片吧    详情 回复 发表于 2024-1-5 15:00
点赞 关注
 

回复
举报

6841

帖子

11

TA的资源

版主

沙发
 

开发板通过api获取网络天气可以准确的获取到网络中的数据,网络连接的稳定性较好,数据传输也很准确。

大佬的帖子,牛呀,遍地开花!

此帖出自stm32/stm8论坛

点评

感谢佬的支持  详情 回复 发表于 2024-1-5 13:27
 
 

回复

224

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
lugl4313820 发表于 2024-1-4 21:19 开发板通过api获取网络天气可以准确的获取到网络中的数据,网络连接的稳定性较好,数据传输也很准确。 ...

感谢佬的支持


此帖出自stm32/stm8论坛
 
 

回复

6060

帖子

7

TA的资源

版主

4
 

有点windows2000的感觉,感觉美工上场设计几个图片吧 

此帖出自stm32/stm8论坛

点评

所言极是,我移植的Windows的字库显示的缘故吧  详情 回复 发表于 2024-1-7 21:09
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

224

帖子

0

TA的资源

一粒金砂(高级)

5
 
秦天qintian0303 发表于 2024-1-5 15:00 有点windows2000的感觉,感觉美工上场设计几个图片吧 

所言极是,我移植的Windows的字库显示的缘故吧

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表