Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例

时间:2024-05-18 17:32:45

本文章主要总结了在win7 64位系统上,用Qt5.9作为平台,采用QMQTT协议,编写一个安卓Android端的发布/订阅控制界面,具体的内容如下所述。


1.1新建一个widget的ui工程,基类为MainWindow,编译器选择MinGW32和Android ARMV7两个编译器,如下图所示:

Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


1.2在如下网址下载开源的QMQTT协议源代码:(注意:刚下载好的源代码有点问题,需要先调试到没有错误再加入工程,具体的调试方法可以参考我之前写的两篇博客:http://blog.****.net/naibozhuan3744/article/details/78807529和http://blog.****.net/naibozhuan3744/article/details/78807406)

QMQTT协议源代码下载地址:https://www.oschina.net/p/qmqtt

如下图所示:

Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


1.3将MQTT的所有头文件和源文件全部加入工程,如下图所示:(注意:主要加入头文件和源文件就行,.pro工程文件不用加入)

其中,QMQTT协议源码的头文件和源文件在文件夹\qmqtt-master\src\mqtt下面,如下图所示

Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例 Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


1.4在.pro工程中,加入如下代码:

QT       +=coregui

greaterThan(QT_MAJOR_VERSION,4):QT+=widgets

TARGET=MQTTTestOnAndroid1

TEMPLATE=app

QT+=network

QT+=websockets


1.5接着在设计界面上拖入两个按钮,分别命名为Connect和Disconnect,拖入一个lineEdit编辑框和textEdit编辑框,如下图所示:

Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


1.6给Connect按钮添加槽函数,在槽函数中写入如下代码:

void MainWindow::on_pushButton_clicked()

{

    //连接本地服务器

    QHostAddress host("127.0.0.1");//注意这个IP端口我用的是阿里云服务器,不方便放出来,所以用这个公用的IP服务器代替

    quint16 port=1883;

    client->setHost(host);//设置EMQ代理服务器IP

    client->setPort(port);//设置EMQ代理服务器端口号

 

    client->setClientId("ClientID1");//设置一个客户端ID

    client->setUsername("pxx");//设置一个客户端用户名pxx

    client->setPassword("pxx");//设置一个客户端密码pxx

    client->connectToHost();//连接EMQ代理服务器

    if(client->isConnectedToHost())

    {

       QMessageBox::information(this,"connectinformation!","connected",QMessageBox::Yes,QMessageBox::No);

    }

}


1.7给Disconnect按钮添加槽函数,并且添加如下代码:

if(client->isConnectedToHost())

    {

       client->disconnectFromHost();//如果正在连接,则关闭连接

    }


1.8在mainwindow.cpp文件中,关联如下头文件

#include"mainwindow.h"

#include"ui_mainwindow.h"

#include<QtNetwork>

#include<QListWidgetItem>

#include"qmqtt.h"

#include<QHostAddress>

#include<QDialog>

#include<QMessageBox>

#include<QByteArray>

#include<QString>

#include<QDebug>


1.9在mainwindow.h文件中,关联如下头文件

#include<QMainWindow>

#include<QString>

#include"qmqtt.h"


1.10在类class MainWindow : public QMainWindow的public内,加入如下代码:

QString topic;

    QString PlayLoadMessage;

    QMQTT::Client*client;//创建QMQTT客户端指针

    QMQTT::Messagemessage1;

    int QoSNum;

    quint16 msgid;


1.11在MainWindow::MainWindow(QWidget*parent)构造函数中,添加如下代码:

client new QMQTT::Client();//初始化QMQTT客户端指针

    ui->lineEdit->setText("/World");

    ui->textEdit->setText("Helloworld123!");

    topic=ui->lineEdit->text();

    QoSNum=2;//MQTT服务质量等级

    msgid=100;//发布信息号


1.12重新构建和运行后,结果如下所示:

Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例


1.13点击Connect后,在EMQ代理服务器上,可以看到该客户端已经连接成功,接着点击Disconnect按钮后,该客户端断开连接,如下图所示:

Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例

客户端连接图


Qt5.9应用MQTT协议生成一个安卓Android发布或订阅控制界面实例

客户端断开图



参考内容:

http://blog.****.net/qq_32865083/article/details/78638781