Linux下QT编程之MQTT实战
应课设要求需要使用MQTT通信协议进行网关开发,所以就花了时间捣鼓一下,也遇到很多的坑所以写了这篇博客记录一下。
1、mqtt服务器有很多在这里我选择EMQ X因为这个是开源并且还有可视化的后台管理便于开发和调试。可以到官网直接下载:点击进去下载
3、接下来就是上传到Ubuntu虚拟机进行解压安装
解压命令:unzip emqx-ubuntu16.04-4.3.10-amd64.zip
安装直接进入解压目录:emqx/bin/
执行命令:./emqx start
4、测试服务器:
在浏览器中输入 http://localhost:18083,用户名admin,密码public,进入Dashboard
小编使用的测试工具是MQTT.fx,这个工具个人决定还是很好用的建议大家去下载
5、关闭服务器
在目录中输入./emqx stop 即可
6、服务其搭建好了之后接下来就是进行mqtt库的移植了,可以到GitHub下载源码点击下载
这里一定要注意的是版本号跟QT一定要对应否则编译不通过 !!!
7、接下来就是上传到Ubuntu进行解压
8、进入解压目录使用QT打开工程文件编译源码
打开之后就是直接简单粗暴编译,过程有一丢丢慢(不出意外会报错,下面就会讲怎么修改)
显示头文件找不到,是因为头文件路径的目录不正确,要进行修改 使用绝对路径即可
接下来就是反复调试查找要修改的头文件路径直到编译通过,通过之后会生成一个工程文件夹里面就有我们需要使用到的库了,别泄气老铁们到这里已经成功3/4了。需要用的只有include文件夹和lib文件夹。
接下来就是新建我们自己的QT工程了,把库加进去就可以爽快的进行开发啦,下面是我自己新建的工程,这里可能会有些朋友不熟悉添加外部库(非常简单)
需要把include文件夹拷贝到源码的mqtt目录里面
下面是把lib文件夹和刚才添加了include源码文件夹的mqtt文件夹放到自己的新建工程自己的工程添加完后的:
打开工程添加库
点击工程右键“添加库”
选择对应的平台就可以了,小编的是Linux平台,你们按照自己的系统来选择即可。添加成功界面如下:
在头文件目录添加一个文件如下:
在头文件中添加mqtt相关的文件编译成功,致辞移植成功啦!
9、下面就是懒人图形界面设计
设计好界面后直接上代码关联后台
.cpp源文件
#include "dialog.h"
#include "ui_dialog.h"
#include <qdebug.h>Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);pMqttClient = new QMqttClient(this);//创建一个客户端对象connect(pMqttClient,&QMqttClient::stateChanged,this,&Dialog::updateLogStateChange);connect(pMqttClient,&QMqttClient::messageReceived,this,&Dialog::recv_message);
}Dialog::~Dialog()
{delete ui;
}void Dialog::updateLogStateChange()//监测客户端的状态是否发生改变
{const QString content = QLatin1String(":state change")+QString::number(pMqttClient->state())+QLatin1Char('\n');qDebug()<<content;
}void Dialog::on_connectBt_clicked()//连接服务器
{pMqttClient->setHostname(ui->ServerIPEdit->text().trimmed());//设置主机IPpMqttClient->setPort(ui->PortEdit->text().trimmed().toUInt());//设置端口号updateLogStateChange();if(pMqttClient->state()==QMqttClient::Disconnected){pMqttClient->connectToHost();ui->connectBt->setText(tr("Disconnected"));}else{pMqttClient->disconnectFromHost();ui->connectBt->setText(tr("Connect"));}
}void Dialog::on_PublishBt_clicked()//发布主题
{QString topic=ui->topicEdit->text().trimmed();//获取主题QString playload = ui->playloadEdit->text().trimmed();pMqttClient->publish(QMqttTopicName(topic),playload.toLocal8Bit());qDebug()<<"publish: ["<<topic<<"] "<<playload;
}void Dialog::on_SubscribeBt_clicked()//订阅主题
{QString topic = ui->Subscribe_top_Edit->text().trimmed();//获取订阅的主题pMqttClient->subscribe(QMqttTopicFilter(topic));qDebug()<<"Subscribe:"<<topic;
}void Dialog::recv_message(const QByteArray &message,const QMqttTopicName &topic)//获取订阅的消息内容
{QString receiveTempStr = ui->Subscribe_play_Edit->toPlainText();QString receiveStr = receiveTempStr + "\n["+topic.name()+"] "+message;ui->Subscribe_play_Edit->setPlainText(receiveStr);ui->Subscribe_play_Edit->moveCursor(QTextCursor::End);qDebug()<<message<<"\n"<<topic.name();}
#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <mqtt/qmqttclient.h>QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();
protected:QMqttClient *pMqttClient;
private slots:void on_connectBt_clicked();void on_PublishBt_clicked();void on_SubscribeBt_clicked();void updateLogStateChange();//客户端状态发生改变void recv_message(const QByteArray &message,const QMqttTopicName &topic);
private:Ui::Dialog *ui;
};
#endif // DIALOG_H
至此实验结束啦
Linux下QT编程之MQTT实战相关推荐
- Linux下socket编程之UDP简单实现
本文实现一个简单的UDP小例子,来说明Linux下socket编程之UDP的简单实现.本文主要包括三个部分:服务器端的实现,客服端的实现和通信测试.实现的功能:客服端发送一条消息给服务器端,服务器端把 ...
- Linux下Socket编程之TCP应用
现在,我们用前面所构建的socket类,重新设计<Linux下Socket编程之TCP Server端>中echo的服务器,然后设计客户端程序. echo服务器的工作原理很简单: 1.接收 ...
- linux下简单的shellfor循环程序,对Linux下shell编程之for循环的实例讲解
对Linux下shell编程之for循环的实例讲解 linux 下 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致 一.常用for循环结构 #语法一 ...
- Linux下Socket编程之UDP原理
一.设计UDP Server类 人们通常用电话连线来说明TCP协议,而UDP协议,则常常用邮递来做比喻.与TCP有连接的信息传输方式不同,UDP协议被认为是对底层IP协议简单的扩展:协议并不保证每个数 ...
- Linux下Socket编程之TCP Server端
一.建模 绝大部分关于socket编程的教程总是从socket的概念开始讲起的.要知道,socket的初衷是个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中 ...
- Linux下Socket编程之TCP原理
一.Socket异常信息 之所以把对异常信息的介绍放到原理之前讲,是因为由于socket本身的复杂性,导致了产生各种异常的复杂性.我们应该时刻铭记的是,sokcet本身属于系统(OS),是系统对TCP ...
- Linux下配置jupyter notebook远程访问实战:配置Jupyter的连接密码、启动jupyter服务、远程访问jupyter(关闭防火墙)
Linux下配置jupyter notebook远程访问实战:配置Jupyter的连接密码.启动jupyter服务.远程访问jupyter(关闭防火墙) 目录 Linux下配置jupyter note ...
- qt调用linux 进程,Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u014746574/article/d ...
- Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)
Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本) 转载于:https://www.cnblogs.com/zhehan54/p/9549017.html
最新文章
- http://www.jikexueyuan.com/course/181.html
- python学习第一天 -----2019年4月15日
- [CLR via C#]12. 泛型
- POJ-1724 深搜剪枝
- linux下能ping ip不能ping域名详解
- ASP.NET和C#中对XML的操作,以及简单的xml与xsl !
- 理解java虚拟机工作后了解吗_JAVA入门到再次入门——深入理解JAVA虚拟机(二)|七日打卡...
- TraceEventsDB event(跟踪事件)总结
- Unity下载文件一(www协程下载)
- Spring之控制反转(IOC)
- AiChallenger比赛记录之样本不均衡
- Fortran common
- ie打开本地html页面慢,win7使用ie浏览器访问网页显示缓慢、卡死的解决方法
- Win10上轻松安装docker,更改镜像安装目录
- JavaScript智能填写续写版(QQ邮箱地址栏简化版)
- 泰坦尼克号第n遍重温泪点
- 【翻译】揭开HTML5的神秘面纱
- 小型网站组建(ENSP)
- 一个基于 Docker 的私有云方案
- 【源码更新】手办一番赏二次元潮玩星球在线抽盲盒源码小程序1.0