202 lines
5.6 KiB
C++
202 lines
5.6 KiB
C++
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
#include "handle.h"
|
|
#include <QFontDatabase>
|
|
|
|
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';
|
|
}
|
|
}
|