一、创建对象并绑定信号槽
m_client = new QMqttClient(this);
connect(m_client, &QMqttClient::stateChanged, this, &MainWindow::updateLogStateChange);
connect(m_client, &QMqttClient::disconnected, this, &MainWindow::brokerDisconnected);
connect(m_client, &QMqttClient::connected, this, &MainWindow::brokerConnected);
connect(m_client, &QMqttClient::messageReceived, this, &MainWindow::brokerMessageRecvd);
connect(m_client, &QMqttClient::pingResponseReceived, this, &MainWindow::brokerPingResponseRecvd);
二、订阅主题
//do Subsciption
auto subscription = m_client->subscribe(QString("sss"), 0);
if(!subscription){//failure
}
else{//success
}
三、取消订阅
//do unSubsciption
m_client->unsubscribe(topic);
四、连接服务器
void MainWindow::connectServ()
{if (m_client->state() == QMqttClient::Disconnected) {m_client->setHostname(ui->lineEdit_hostip->text());m_client->setPort(ui->lineEdit_hostport->text().toInt());m_client->setUsername(ui->lineEdit_username->text());m_client->setPassword(ui->lineEdit_password->text());m_client->setClientId(ui->lineEdit_clientid->text());m_client->setAutoKeepAlive(true);//mqtt willm_client->setWillTopic(WILLTOPIC);m_client->setWillQoS(1);QString willMessage = ui->lineEdit_clientid->text()+","+ui->lineEdit_username->text()+","+"loginout";m_client->setWillMessage(willMessage.toLatin1());m_client->connectToHost();}
}
五、断开服务器
void MainWindow::disConnectServ()
{if (m_client->state() == QMqttClient::Connected){m_client->disconnectFromHost();}
}
六、其他槽函数
void MainWindow::updateLogStateChange()
{const QString content = QDateTime::currentDateTime().toString()+ QLatin1String(": State Change")+ QString::number(m_client->state())+ QLatin1Char('\n');ui->textEdit->insertPlainText(content);
}void MainWindow::brokerDisconnected()
{const QString content = QDateTime::currentDateTime().toString()+ QLatin1String(": disconnected\n");ui->textEdit->insertPlainText(content);
}
void MainWindow::brokerConnected()
{const QString content = QDateTime::currentDateTime().toString()+ QLatin1String(": connected\n");ui->textEdit->insertPlainText(content);
}
void MainWindow::brokerMessageRecvd(const QByteArray &message, const QMqttTopicName &topic)
{//insert to log textconst QString content = QDateTime::currentDateTime().toString()+ QLatin1String(" Received Topic: ")+ topic.name()+ QLatin1String(" Message: ")+ message+ QLatin1Char('\n');ui->textEdit->insertPlainText(content);
}
void MainWindow::brokerPingResponseRecvd()
{const QString content = QDateTime::currentDateTime().toString()+ QLatin1String(": pingresponse valid")+ QLatin1Char('\n');ui->textEdit->insertPlainText(content);
}