【STM32MP135F-DK】9-网络测评,用QT显示网络天气
<div class='showpostmsg'> 本帖最后由 qiao--- 于 2024-1-4 18:03 编辑<p>我们在之前已经成功移植了qt,现在可以进行qt界面的开发,本次测评我打算测试一下板子的网络功能,而测评的主要方式就是利用网上的api获取网络天气,最终在qt上显示。</p>
<p> </p>
<p><strong><span style="font-size:22px;">1.在网上找一个可以获取天气的api</span></strong></p>
<p>我用的是下面这个链接<a href="http://query.asilu.com/weather/baidu/?city=" rel="nofollow noopener noreferrer" target="_blank">http://query.asilu.com/weather/baidu/</a>,当我们进入这个链接的时候,会显示一系列的JSON数据,如下图,而我们要做的就是解析下面的这个JSON数据</p>
<p><strong><span style="font-size:22px;"> 2.创建qt工程</span></strong></p>
<p>我们打开Linux虚拟机下面的qtCreator,工程创建模式按照我之前的测评就可以【STM32MP135F-DK】7-部署QT开发环境+运行第一个QT程序 <a href="https://bbs.eeworld.com.cn/thread-1267168-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1267168-1-1.html</a>。</p>
<p>我们在.pro文件下加入network,这个可以加入一些网络的库。</p>
<p> </p>
<p>接着我们构建一个简单的界面,我是直接拖用qtCreator现有的图形库,我用的是如下的布局。记着要设置窗口的大小要为480*272,这个在我之前的测评也有讲过,我这里就不在赘述。</p>
<p> </p>
<p>然后在widget.h中添加以下的代码(我这里就把所有的代码展示了)</p>
<pre>
<code>#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
</code></pre>
<p>在widget.cpp中添加下面的代码,这里主要是用了一些函数对JSON数据进行了解析。</p>
<pre>
<code>#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().toObject()["date"].toString();
QString weather = JsonObject["weather"].toArray().toObject()["weather"].toString();
QString temp = JsonObject["weather"].toArray().toObject()["temp"].toString();
QString wind = JsonObject["weather"].toArray().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()))));
}
</code></pre>
<p>我们可以在电脑上先预览一下效果在移植到板子上。</p>
<p> </p>
<p><strong><span style="font-size:22px;">3.编译并移植到板子上看看效果</span></strong></p>
<p>我们用qmake && make编译我们的工程,并拷贝到我们的板子上用scp命令拷贝就行,我在终端执行我的qt可执行文件就在屏幕上出现了以下效果</p>
<p> </p>
<p>我这里只添加了四个直辖市的天气,有兴趣的小伙伴可以把所有的城市都实现出来。</p>
<p> </p>
<p> </p>
<p>总结:开发板通过api获取网络天气可以准确的获取到网络中的数据,网络连接的稳定性较好,数据传输也很准确。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>开发板通过api获取网络天气可以准确的获取到网络中的数据,网络连接的稳定性较好,数据传输也很准确。</p>
<p>大佬的帖子,牛呀,遍地开花!</p>
lugl4313820 发表于 2024-1-4 21:19
开发板通过api获取网络天气可以准确的获取到网络中的数据,网络连接的稳定性较好,数据传输也很准确。
...
<p>感谢佬的支持</p><br/> <p>有点windows2000的感觉,感觉美工上场设计几个图片吧 </p>
秦天qintian0303 发表于 2024-1-5 15:00
有点windows2000的感觉,感觉美工上场设计几个图片吧
<p>所言极是,我移植的Windows的字库显示的缘故吧</p>
页:
[1]