IOT_Car_Mobile_Manager/mainwindow.cpp

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';
}
}