在qt5.10之前,mqtt需要自己编译库,
1.源码路径
下载地址:https://github.com/emqx/qmqtt,注意要下载qmqtt-master版本的,不要下载qtmqtt-dev
2.生成库文件
使用qtcreator打开qmqtt.pro文件,构建src工程,
编译报错:Could not create directory "...\qmqtt\Error in " Util.asciify("build-qmqtt-Qt_5_6_3_msvc2013-Debug")": TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension(0x34bb080) is not a function\src"
Error while building/deploying project qmqtt (kit: Qt 5.6.3 (msvc2013))
When executing step "qmake"
解决方法:
左边树,选择项目,将影子构建取消勾选。
再次构建src工程,可生成lib文件夹,里面含debug和Release版本的dll和lib文件。
Qt5Qmqtt.dll、Qt5Qmqtt.lib、Qt5Qmqttd.dll、Qt5Qmqttd.lib
3.文件拷贝
将文件拷贝到qt的安装目录指定文件夹下,这样就当作了qt自己的文件来使用了。
3.1.h文件拷贝
在qt的安装目录include文件夹下(如D:\Qt\Qt5.6.3_2013\5.6.3\msvc2013\include),创建文件夹QtMqtt,并将文件夹qmqtt-master\src\mqtt下的.h文件拷贝到QtMqtt文件夹下。
3.2Lib和dll文件拷贝
Lib文件:将Qt5Qmqtt.lib和Qt5Qmqttd.lib文件拷贝到qt的安装目录的lib文件夹下(如D:\Qt\Qt5.6.3_2013\5.6.3\msvc2013\lib)。
Dll文件:将Qt5Qmqtt.dll和Qt5Qmqttd.dll文件拷贝到qt的安装目录的bin文件夹下(如D:\Qt\Qt5.6.3_2013\5.6.3\msvc2013\bin)。
3.3调用方法
在vs2013工程--右键--属性,C/C++--常规--附加包含目录,添加$(QTDIR)\include\QtMqtt;链接器--输入--附加依赖项,添加$(QTDIR)\lib\Qt5Qmqttd.lib(Release为$(QTDIR)\lib\Qt5Qmqtt.lib)。在使用时,#include <qmqtt.h>即可。
4.Demo演示
关键方法:
m_client = new QMQTT::Client(QHostAddress(ip), port, this);
m_client->setUsername(Username);
m_client->setPassword(Password);
m_client->setClientId(clientid);
m_client->connectToHost();
//m_client->setAutoReconnect(true);
connect(m_client, &QMQTT::Client::connected, this, [this]() {
const QString content = QLatin1String(" connected");
});
connect(m_client, &QMQTT::Client::disconnected, this, [this]() {
const QString content = QLatin1String(" disconnected");
});
connect(m_client, &QMQTT::Client::received, this, [this](const QMQTT::Message& message) {
const QString content = QString("received, Topic: %1, Message: %2").arg(message.topic()).arg(QString(message.payload()));
});
connect(m_client, &QMQTT::Client::pingresp, this, [this]() {
const QString content = QLatin1String(" pingresp");
});
connect(m_client, &QMQTT::Client::subscribed, this, [this](const QString& topic, const quint8 qos) {
const QString content = QString("subscribed, Topic: %1, qos: %2").arg(topic).arg(qos);
});
connect(m_client, &QMQTT::Client::unsubscribed, this, [this](const QString& topic) {
const QString content = QString("unsubscribed, Topic: %1").arg(topic);
});
connect(m_client, &QMQTT::Client::published, this, [this](const QMQTT::Message& message, quint16 msgid) {
const QString content = QString("published, Topic: %1, Message: %2, msgid:%3").arg(message.topic()).arg(QString(message.payload())).arg(msgid);
});
connect(m_client, &QMQTT::Client::error, this, [this](const QMQTT::ClientError error) {
const QString content = QString("error, value: %1").arg(error);
});