本文章主要总结了在win7 64位系统上,用Qt5.9作为平台,采用QMQTT协议,编写一个安卓Android端的发布/订阅控制界面,具体的内容如下所述。
1.1新建一个widget的ui工程,基类为MainWindow,编译器选择MinGW32和Android ARMV7两个编译器,如下图所示:
1.2在如下网址下载开源的QMQTT协议源代码:(注意:刚下载好的源代码有点问题,需要先调试到没有错误再加入工程,具体的调试方法可以参考我之前写的两篇博客:http://blog.****.net/naibozhuan3744/article/details/78807529和http://blog.****.net/naibozhuan3744/article/details/78807406)
QMQTT协议源代码下载地址:https://www.oschina.net/p/qmqtt
如下图所示:
1.3将MQTT的所有头文件和源文件全部加入工程,如下图所示:(注意:主要加入头文件和源文件就行,.pro工程文件不用加入)
其中,QMQTT协议源码的头文件和源文件在文件夹\qmqtt-master\src\mqtt下面,如下图所示
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编辑框,如下图所示:
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重新构建和运行后,结果如下所示:
1.13点击Connect后,在EMQ代理服务器上,可以看到该客户端已经连接成功,接着点击Disconnect按钮后,该客户端断开连接,如下图所示:
客户端连接图
客户端断开图
参考内容:
http://blog.****.net/qq_32865083/article/details/78638781