MQTT库的加载方法很多,在此推荐两篇博文(我这里就不再赘述):
Qt官方MQTT库的使用,附一个MqttClient例子
Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建
Qt官方MQTT库的使用
值得注意的是,mqtt目前主要有两个版本,一个是第三方库,一个是qt官方库,两者都需要自己下载源码生成库,另外在方法接口、函数的使用上还是有些区别,注意千万不要弄混了,我当时就是把方法弄混了折腾了好久。。。。
下面是测试代码:
连接:
//连接
void MainWindow::on_pushButton_connect_clicked()
{
if (m_client->state() == QMqttClient::Disconnected)
{
ui->pushButton_connect->setText(tr("断开"));
m_client->setHostname(ui->lineEdit_host->text());
m_client->setPort(ui->lineEdit_port->text().toInt());
m_client->setUsername(ui->lineEdit_user->text());
m_client->setPassword(ui->lineEdit_pwd->text());
m_client->setClientId("1234");
m_client->setKeepAlive(120);
ui->lineEdit_host->setEnabled(false);
ui->lineEdit_port->setEnabled(false);
ui->lineEdit_user->setEnabled(false);
ui->lineEdit_pwd->setEnabled(false);
m_client->connectToHost();
}
else
{//断开连接
ui->pushButton_connect->setText(tr("连接"));
ui->lineEdit_host->setEnabled(true);
ui->lineEdit_port->setEnabled(true);
ui->lineEdit_user->setEnabled(true);
ui->lineEdit_pwd->setEnabled(true);
m_client->disconnectFromHost();
ui->textEdit->append("连接断开!!!");
}
}
发布
//发布
void MainWindow::on_pushButton_2_clicked()
{
QString topicPub;
QByteArray messagePub;
if(m_client->state() == QMqttClient::Connected)
{
topicPub = ui->lineEdit_pub->text();
messagePub = ui->lineEdit_pubMsg->text().toUtf8();
m_client->publish(topicPub, messagePub, 0);
return;
}
ui->textEdit->append("请连接后重新操作!");
}
订阅
//订阅
void MainWindow::on_pushButton_clicked()
{
QString topicSub;
int qos;
if(m_client->state() == QMqttClient::Connected)
{
topicSub = ui->lineEdit_sub->text();
qos = ui->spinBox->text().toInt();
m_client->subscribe(topicSub, qos);
return;
}
ui->textEdit->append("请连接后重新操作!");
}
接收消息
//收到消息
void MainWindow::topicMessageReceived(const QByteArray &message, const QMqttTopicName &topic)
{
QString content;
content = QDateTime::currentDateTime().toString() + QLatin1Char('\n');
content += QLatin1String(" Received Topic: ") + topic.name() + QLatin1Char('\n');
content += QLatin1String(" Message: ") + message + QLatin1Char('\n');
ui->textEdit->append(content);
}
测试结果图
MQTT主要就是通过服务器代理,实现两个客户端之间的通信,上图就展示了两个客户端通信成功!
MQTT客户端测试完整源码下载
温馨提示:源码里面的服务器IP和用户名需要自己改,我使用的是公司服务器,暂不提供。