应课设要求需要使用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实战相关推荐

  1. Linux下socket编程之UDP简单实现

    本文实现一个简单的UDP小例子,来说明Linux下socket编程之UDP的简单实现.本文主要包括三个部分:服务器端的实现,客服端的实现和通信测试.实现的功能:客服端发送一条消息给服务器端,服务器端把 ...

  2. Linux下Socket编程之TCP应用

    现在,我们用前面所构建的socket类,重新设计<Linux下Socket编程之TCP Server端>中echo的服务器,然后设计客户端程序. echo服务器的工作原理很简单: 1.接收 ...

  3. linux下简单的shellfor循环程序,对Linux下shell编程之for循环的实例讲解

    对Linux下shell编程之for循环的实例讲解 linux 下 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致 一.常用for循环结构 #语法一 ...

  4. Linux下Socket编程之UDP原理

    一.设计UDP Server类 人们通常用电话连线来说明TCP协议,而UDP协议,则常常用邮递来做比喻.与TCP有连接的信息传输方式不同,UDP协议被认为是对底层IP协议简单的扩展:协议并不保证每个数 ...

  5. Linux下Socket编程之TCP Server端

    一.建模 绝大部分关于socket编程的教程总是从socket的概念开始讲起的.要知道,socket的初衷是个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中 ...

  6. Linux下Socket编程之TCP原理

    一.Socket异常信息 之所以把对异常信息的介绍放到原理之前讲,是因为由于socket本身的复杂性,导致了产生各种异常的复杂性.我们应该时刻铭记的是,sokcet本身属于系统(OS),是系统对TCP ...

  7. Linux下配置jupyter notebook远程访问实战:配置Jupyter的连接密码、启动jupyter服务、远程访问jupyter(关闭防火墙)

    Linux下配置jupyter notebook远程访问实战:配置Jupyter的连接密码.启动jupyter服务.远程访问jupyter(关闭防火墙) 目录 Linux下配置jupyter note ...

  8. qt调用linux 进程,Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u014746574/article/d ...

  9. Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)

    Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本) 转载于:https://www.cnblogs.com/zhehan54/p/9549017.html

最新文章

  1. http://www.jikexueyuan.com/course/181.html
  2. python学习第一天 -----2019年4月15日
  3. [CLR via C#]12. 泛型
  4. POJ-1724 深搜剪枝
  5. linux下能ping ip不能ping域名详解
  6. ASP.NET和C#中对XML的操作,以及简单的xml与xsl !
  7. 理解java虚拟机工作后了解吗_JAVA入门到再次入门——深入理解JAVA虚拟机(二)|七日打卡...
  8. TraceEventsDB event(跟踪事件)总结
  9. Unity下载文件一(www协程下载)
  10. Spring之控制反转(IOC)
  11. AiChallenger比赛记录之样本不均衡
  12. Fortran common
  13. ie打开本地html页面慢,win7使用ie浏览器访问网页显示缓慢、卡死的解决方法
  14. Win10上轻松安装docker,更改镜像安装目录
  15. JavaScript智能填写续写版(QQ邮箱地址栏简化版)
  16. 泰坦尼克号第n遍重温泪点
  17. 【翻译】揭开HTML5的神秘面纱
  18. 小型网站组建(ENSP)
  19. 一个基于 Docker 的私有云方案
  20. 【源码更新】手办一番赏二次元潮玩星球在线抽盲盒源码小程序1.0

热门文章

  1. 技校学计算机当兵,技校毕业证可以当兵吗 有用吗
  2. Mathjax公式教程
  3. 笔记本插上移动硬盘wifi就上不了网,除了供电问题,驱动冲突的可能更大。
  4. [matlab]normrnd和randn的区别
  5. 仿微信支付宝支付密码
  6. 常见前端面试题整理(带答案)
  7. windows上安装Apollo
  8. discuz手机客户端java_APPCAN推Discuz手机论坛客户端插件
  9. Android性能细节优化之---字符串连接篇
  10. win8 开发之旅(11) --一封写给自己的信 由打苍蝇游戏写起