QT编译并部署QtMqtt相关环境+跑测demo【超详细教程】

文章目录

  • 概要
  • 整体架构流程
      • ▷下载指定版本的QMqtt源码:
      • ▷编译后同步MQTT相关文件:
  • 技术名词解释
  • 技术实现步骤详解
      • 一、编译源码
        • 1、编译报错
        • 2、解决思路
        • 3、编译通过
      • 二、继续完善mqtt应用环境
        • 1、打开编译生成的shadow build文件夹
        • 2、同步lib
        • 3、同步bin
        • 4、同步mkspecs
      • 三、跑一个Demo进行测试
        • 1、修改.pro
        • 2、编译报错,要修改头文件
        • 3、点击 编译->运行。
        • 4、测试demo
  • 小编有话说

概要

前情提要:要在windows环境下,用QT跑通一个基于MQTT实现的demo。

操作系统:windows
编译器及其版本:QT 5.14.1

Qt版MQTT git源码:【下载地址】https://github.com/qt/qtmqtt
(注意:有版本之分,按编译器版本下载,此处我的是5.14.1)
在这里插入图片描述

整体架构流程

因为QT官方的MQTT并未包含在安装目录下,所以使用它,需要根据源码进行自行编译。
官方已将原代码开源,源码下载地址概要里已经写了,可以自己从 GitHub 拉下来(或下载安装包)来编译。

▷下载指定版本的QMqtt源码:

Github上第一个分支dev对应QT6.0以上版本,所以安装QT5的朋友可能会发生安装出错或者无法使用的情况。
这种情况下,直接在分支列表中寻找和自己qt编译器相同版本的源码,下载它即可。

▷编译后同步MQTT相关文件:

想要在当前环境下自如的使用qmqtt相关库,需要将编译后的MQTT相关文件,放到QT编译器文件夹中。

技术名词解释

  • QT编译器文件夹 : 指的就是QT安装下载的文件夹
  • shadow build文件夹:即QT编译文件自动生成的影子文件,生成的相关文件都在其中。
    (如:build-qtmqtt-Desktop_Qt_5_14_2_MinGW_64_bit-Release)

技术实现步骤详解

【PS:以下路径中出现的 qtmqtt-5.14.1,需要替换成 qtmqtt-<你下载的版本> 】

一、编译源码

1、编译报错

直接对下拉的QMqtt源文件进行编译,发现编译报错如下
在这里插入图片描述

2、解决思路

需要将 qtmqtt-5.14.1\src\mqtt 路径下的所有.h头文件,打包放入一个文件夹中,
装所有.h文件夹的名称指定命名为:QtMqtt。
在这里插入图片描述

将改文件拷贝到QT编译器文件夹中,
此处以我的位置为例: (共两处,分别为32位mingw和64位mingw 的 include文件夹)

D:\Qt\Qt5.14.2\5.14.2\mingw73_32\include
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include

在这里插入图片描述

3、编译通过

在这里插入图片描述

二、继续完善mqtt应用环境

通过后:
继续处理以下几个文件

1、打开编译生成的shadow build文件夹

在这里插入图片描述
总的来说:
就是要将同版本QT 编译生成的MQTT相关文件夹:bin、lib、mkspecs,同步放到QT编译器文件中。
在这里插入图片描述

2、同步lib

在这里插入图片描述

3、同步bin

在这里插入图片描述

4、同步mkspecs

在这里插入图片描述

三、跑一个Demo进行测试

以源文件中的simpleclient作为demo为例:
相对路径:qtmqtt-5.14.1\examples\mqtt\simpleclient
将该文件夹复制到另外一个工程目录下,进行单独的编译和测试。

1、修改.pro

①先在.pro里面,添加好mqtt模块
②再将指定的生成位置注释掉
在这里插入图片描述

2、编译报错,要修改头文件

此时编译,会提醒你两个位置的头文件有问题
按照图示做一下修改,修改为:

#include <QtMqtt/qmqttclient.h>
// QtMqtt就是刚才将.h头文件放到QT编译器文件中定义的文件夹名称。

在这里插入图片描述在这里插入图片描述

3、点击 编译->运行。

就可以看到demo正常运行的界面。
在这里插入图片描述

4、测试demo

官方提供了 test.mosquitto.org 和 broker.hivemq.com 两个测试地址(目前两个都可以使用)。
可以使用官方的测试地址,也可以使用自己的地址。

点击connect以后,即可进行sub订阅和pub发布
等待中:State Change0…State Change2 表示已连接上。
在这里插入图片描述

小编有话说

此次mqtt的相关学习,来自于几个博主的详细文章,特此感谢!
参考文章:
https://blog.csdn.net/liyuanbhu/article/details/106597506
https://blog.csdn.net/youthshadows/article/details/128813301

最近正在研究mqtt应用的相关方案,接下来可能会陆续出好几篇相关教程。Linux环境下的搭建,正在码文中…
后期更新会把链接放上来。

感兴趣的宝子,可以点个收藏,加个关注哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/228255.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FA对接FC流程

2、FA进行对接 &#xff08;1&#xff09;首先安装好AD域控服务器DHCPDNS&#xff08;注意&#xff0c;不要忘记了做DNS正反向解析&#xff0c;就是把已经安装了ITA的主机做解析&#xff09;&#xff0c;在里面创建域用户 &#xff08;2&#xff09;安装ITA和VAG/VLB&#xf…

4.32 构建onnx结构模型-Erf

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Erf 结点进行分析 方式 方法一&…

R306指纹识别模块指令系统

一&#xff1a;指令集 1. GR_GetImage 指令代码&#xff1a;01H 功能&#xff1a;从传感器上读入图像存于图像缓冲区 2. GR_GenChar 指令代码&#xff1a;02H 功能&#xff1a;根据原始图像生成指纹特征存于 CharBuffer1 或 CharBuffer2 3. GR_Match 指令代码&#xff…

【操作系统xv6】学习记录1

前置说明&#xff1a; git-v9版本&#xff1a;git clone https://github.com/mit-pdos/xv6-public/tree/xv6-rev9 bili:https://www.bilibili.com/video/BV15r4y1z75F 深圳大学罗秋明老师的课程 我自己用的wsl2的ubuntu18 无桌面版本 make qemu-nox bug 起初在双系统的ubuntu…

matlab列优先与高维矩阵重构

由于matlab在列化a(:)以及reshape(a)等操作中是列优先的&#xff0c;所以要重构出新的高维度矩阵&#xff0c;通常要把reshape和permute结合起来使用。 先到 http://caffe.berkeleyvision.org/ 下载 训练好的model bvlc_reference_caffenet.caffemodel; 更多caffe使用也请参看…

分布式【雪花算法】

雪花算法 背景&#xff1a;在分布式系统中&#xff0c;需要使用全局唯一ID&#xff0c;期待ID能够按照时间有序生成。 **原理&#xff1a;**雪花算法是 64 位 的二进制&#xff0c;一共包含了四部分&#xff1a; 1位是符号位&#xff0c;也就是最高位&#xff0c;始终是0&am…

Python数值型字符串校验(try异常拦截解析)

从键盘输入一行字符串&#xff0c;编写Python代码判定字符串是python“合法”数值。 (笔记模板由python脚本于2023年12月25日 18:00:52创建&#xff0c;本篇笔记适合熟悉Python符串基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.py…

docker +gitee+ jenkins +maven项目 (一)

jenkins环境和插件配置 文章目录 jenkins环境和插件配置前言一、环境版本二、jenkins插件三、环境安装总结 前言 现在基本都是走自动化运维&#xff0c;想到用docker 来部署jenkins &#xff0c;然后jenkins来部署java代码&#xff0c;做到了开箱即用&#xff0c;自动发布代码…

【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

DevOps持续交付之容器化CICD流水线

DevOps持续交付 随着DevOps⼤规模化的落地和应⽤&#xff0c;持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成&#xff0c;使⽤的开源⼯具是Jenkins&#xff0c;CD指的是持续交付和持续部署&#xff0c;⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段…

【K8S 部署】基于kubeadm搭建Kurbernetes集群

目录 一、基本架构 二、环境准备: 三、安装部署 1、所有节点安装docker 2、、所有节点安装kubeadm&#xff0c;kubelet和kubectl 3、配置网络--flannel 4、测试 pod 资源创建 四、安装部署与k8s集群对接的Harbor仓库 五、Dashboard安装部署&#xff1a; 一、基本架构…

mac 生成 本地.ssh

输入下面命令行 ssh-keygen 默认回车得到下面的 Generating public/private rsa key pair. Enter file in which to save the key (/Users/{用户名}/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has be…

论文阅读——SG-Former

SG-Former: Self-guided Transformer with Evolving Token Reallocation 1. Introduction 方法的核心是利用显著性图&#xff0c;根据每个区域的显著性重新分配tokens。显著性图是通过混合规模的自我关注来估计的&#xff0c;并在训练过程中自我进化。直观地说&#xff0c;我们…

文件监控-IT安全管理软件

文件监控和IT安全管理软件是用于保护企业数据和网络安全的工具。这些工具可以帮助企业监控文件的变化&#xff0c;防止未经授权的访问和修改&#xff0c;并确保数据的安全性和完整性。 一、具有哪些功能 文件监控软件可以实时监控文件系统的活动&#xff0c;包括文件的创建、修…

C++继承与派生——(8)多继承

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 苦难和幸福一样&#xff0c;都是生命盛…

接入Cloudflare后Nginx和Django获取用户真实IP的办法

可以用Nginx的real_ip的相关命令来实现这个需求。 01-real_ip命令集详解 real_ip命令的使用分为两个步骤: 01-1-设置从哪些代理IP获取真实IP 第1个步骤&#xff1a;通过set_real_ip_from命令设置从哪些代理IP请求获取真实的IP,比如下面的命令&#xff1a; set_real_ip_from…

深入解析泛型

一、泛型的诞生 在C#1 中我们还没有泛型的时候我们收集数据通常需要使用到数组&#xff0c;或者使用封装好的数组集合Hashtable ArrayList。 举个例子&#xff1a; 我们在读取文件的时候就会需要一个数组来储存读取的数据的内容 但我们并不知数据的具体长度也就无法在声明的…

信息安全概论考试题目

文章目录 一、计算题二、网络安全协议应用(30 分)三、材料分析(15 分)四、系统安全配量(共 15 分) 一、计算题 1、Playfair 算法属于经典对称加密方式。曾经在相当长的一段时期内&#xff0c;Playfair算法被认为是一种牢不可破的加密方法。现有明文 introduction to informati…

python使用openpyxl操作excel

文章目录 前提读取已有excel创建一个excel工作簿对象创建excel工作簿中的工作表获取工作表第一种&#xff1a;.active 方法第二种&#xff1a;通过工作表名获取指定工作表​​​​​​第三种&#xff1a;.get_sheet_name() 修改工作表的名称数据操作写入数据按单元格写入通过指…

Java 基础学习(十九)网络编程、反射

1 Socket编程 1.1 Socket编程概述 1.1.1 Socket简介 在网络编程中&#xff0c;Socket&#xff08;套接字&#xff09;是一种抽象概念&#xff0c;它用于在不同计算机之间进行通信。Socket可以看作是一种通信的端点&#xff0c;可以通过Socket与其他计算机上的程序进行数据传…