脚本宝典收集整理的这篇文章主要介绍了X-MagicBox-820的luatOS之路连载系列5,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
周末了,拿起MagicBox吹吹灰,片刻,再放下。这次跑个题,做个Qt的实例,针对WebEngineView类和Mqtt的一个应用。
老王安装的Qt版本中含有WebEngine模块,但缺少MQTT。所幸除了第三方的EMQ,官方也有库,需要自行编译。因此,第一步,编译和配置mqtt库。
https://github.COM/qt/qtmqtt
经过验证,除了需要安装PErl,可以正确编译生成库文件。对Perl不了解,下载地址如下:
之后将生成目录的如图三个文件夹内的文件复制到Qt安装目录的对应位置,这样就可以像使用其他模块一样直接使用了。
接下来打开设计师界面,简单加几个控件,widget用于显示网页,按键用来操作mqtt,这里没啥看的,根据个人想法设计,主要是外观性的内容。
回到编辑界面,开始写代码。首先是在主界面显示个网页。Qt WebEngine Core是基于chromium的核心,Win平台下需要使用MSVC编译器。
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->SETUPUi(this); ui->widget->setContextMenupolicy(Qt::NoContextMenu); //这一句就可以显示本地的html文件了 ui->widget->load(QUrl("C:/Users/wangd/Desktop/Qt/WebEngine/webchart/data.html")); }
方便起见,从apache ECharts的例子中下载一个动态的html文件(含JS)展示如下:
QString topic = "820/alert"; QString msg = "please be careful"; m_client->publish(topic, msg.toUtf8())
接下来将mqtt的业务代码加进去。简单客户端功能,含发布和订阅功能。计划也只是订阅位置信息和发布一条爱心提醒。
//获取界面上的地址和端口号 m_client->setHostname(ui->lineEdit_host->text()); m_client->setPort(ui->lineEdit_port->text().toInt()); //连接服务器 类似tcp client m_client->connectToHost();
订阅主题的方法:
//subscribe QString topic= "820/gps"; m_client->subscribe(topic)
发布消息的方法:
QString topic = "820/alert"; QString msg = "please be careful"; m_client->publish(topic, msg.toUtf8())
接收消息的处理,信号来自于QMqttClient,直接打印出来查看:
connect(m_client, &QMqttClient::messageReceived, this, [this](const QByteArray &message, const QMqttTopicName &topic) { const QString content = QDateTime::currentDateTime().toString() + QLatin1String("Topic: ") + topic.name() + QLatin1String("Message: ") + message + QLatin1Char('n'); qDebug() << content; });
调试好代码,就可以使用工具测试效果了。依然是通信猫小工具,订阅"820/alert" 主题,发布"820/gps"主题。
然后运行老王自己的客户端进行消息通信。借助公共服务器进行主题的订阅与发布。】
再然后呢,老王是想着Qt这个客户端是要获得MagicBox的GPS数据,然后在地图上做标记呢,那么前提就要显示地图。思来想去,还是看看百度开放平台吧。需要注册账号申请成为开发者。其实在HTML中引入地图还是很简单的,百度提供了几类API,老王要在浏览器中使用,自然是JavaScript了。
地图的示例代码:
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>Hello, World</title> <style type="text/css"> html{height:100%} body{height:100%;margin:0px;padding:0px} #container{height:100%} </style> <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=您的密钥"> </script> </head> <body> <div id="container"></div> <script type="text/javascript"> VAR map = new BMapGL.Map("container"); // 创建地图实例 var point = new BMapGL.Point(116.404, 39.915); // 创建点坐标 map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别 </script> </body> </html>
加入到老王的工程中去,就是下面的样子。
以上是脚本宝典为你收集整理的X-MagicBox-820的luatOS之路连载系列5全部内容,希望文章能够帮你解决X-MagicBox-820的luatOS之路连载系列5所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。