本帖最后由 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获取网络天气可以准确的获取到网络中的数据,网络连接的稳定性较好,数据传输也很准确。