#include "mainwindow.h" #include "ui_mainwindow.h" #include "handle.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { QFontDatabase::addApplicationFont(":/font/逍遥行书.ttf"); client = new QMQTT::Client(QHostAddress::LocalHost, 1883); connect(client, &QMQTT::Client::disconnected, this, &MainWindow::disconnected_handler); connect(client, &QMQTT::Client::received, this, &MainWindow::received_handler); connect(client, &QMQTT::Client::pingresp, this, &MainWindow::pingresp_handler); connect(client, &QMQTT::Client::connected, this, &MainWindow::connected_handler); connect(client, &QMQTT::Client::subscribed, this, &MainWindow::subscribed_handler); right_r = new QTimer(this); left_r = new QTimer(this); connect(right_r,&QTimer::timeout,this,[=]{ if (key != '9') { QMQTT::Message message; QByteArray payload; message.setQos(1); payload.append('9'); message.setPayload(payload); message.setTopic("/Car"); client->publish(message); key = '9'; } }); connect(left_r,&QTimer::timeout,this,[=]{ if (key != 'A') { QMQTT::Message message; QByteArray payload; message.setQos(1); payload.append('A'); message.setPayload(payload); message.setTopic("/Car"); client->publish(message); key = 'A'; } }); ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_connectButton_clicked() { client->setHostName(ui->addressEdit->text()); client->setPort(ui->portEdit->text().toInt()); client->setClientId("ios"); client->setUsername("iPhone"); client->setPassword("iPhone"); client->connectToHost(); } void MainWindow::connected_handler() { const QString content = QDateTime::currentDateTime().toString() +"\n" +"MQTT服务器已连接上\n"; ui->log->insertPlainText(content); client->subscribe(ui->ctrlTopicEdit->text(),1); ui->addressEdit->setEnabled(false); ui->portEdit->setEnabled(false); ui->ctrlTopicEdit->setEnabled(false); ui->connectButton->setEnabled(false); ui->disconnectButton->setEnabled(true); ui->rocker->setEnabled(true); ui->left_r->setEnabled(true); ui->right_r->setEnabled(true); client->setAutoReconnect(true); connect(ui->rocker,&Handle::keyNumchanged,ui->rocker,[=](int num){ if (num != key) { QMQTT::Message message; QByteArray payload; message.setQos(1); payload.append(num+'0'); message.setPayload(payload); message.setTopic("/Car"); client->publish(message); key = num; } }); } void MainWindow::disconnected_handler() { const QString content = QDateTime::currentDateTime().toString() +"\n" +"MQTT服务器已断开\n"; ui->log->insertPlainText(content); ui->addressEdit->setEnabled(true); ui->portEdit->setEnabled(true); ui->ctrlTopicEdit->setEnabled(true); ui->connectButton->setEnabled(true); ui->disconnectButton->setEnabled(false); ui->rocker->setEnabled(false); ui->left_r->setEnabled(false); ui->right_r->setEnabled(false); disconnect(ui->rocker); } void MainWindow::received_handler(const QMQTT::Message& message) { const QString content = QDateTime::currentDateTime().toString() +"\n" +"Topic: "+message.topic()+ QLatin1Char('\n') +"Message: "+message.payload()+ QLatin1Char('\n') +"Qos: "+QLatin1Char(message.qos()+'0')+'\n'; ui->log->insertPlainText(content); } void MainWindow::pingresp_handler() { const QString content = QDateTime::currentDateTime().toString() + QLatin1Char('\n') + QLatin1String("MQTT Pong!") + QLatin1Char('\n'); ui->log->insertPlainText(content); } void MainWindow::subscribed_handler(const QString& topic, const quint8 qos) { const QString content = QDateTime::currentDateTime().toString() +"\n" +"Topic: "+topic+ QLatin1Char('\n') +"Qos: "+QLatin1Char(qos+'0')+QLatin1Char('\n')+ "已订阅\n"; ui->log->insertPlainText(content); } void MainWindow::error_handler(const QMQTT::ClientError error) { const QString content = QDateTime::currentDateTime().toString() +"\n" +"Error: "+ error; ui->log->insertPlainText(content); } void MainWindow::on_disconnectButton_clicked() { client->disconnectFromHost(); client->setAutoReconnect(false); } void MainWindow::on_log_textChanged() { ui->log->moveCursor(QTextCursor::End); } void MainWindow::on_right_r_pressed() { right_r->start(100); } void MainWindow::on_right_r_released() { right_r->stop(); if ('4' != key) { QMQTT::Message message; QByteArray payload; message.setQos(1); payload.append('4'); message.setPayload(payload); message.setTopic("/Car"); client->publish(message); key = '4'; } } void MainWindow::on_left_r_pressed() { left_r->start(100); } void MainWindow::on_left_r_released() { left_r->stop(); if ('4' != key) { QMQTT::Message message; QByteArray payload; message.setQos(1); payload.append('4'); message.setPayload(payload); message.setTopic("/Car"); client->publish(message); key = '4'; } }