Initial repo.
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 53 KiB |
|
@ -0,0 +1,5 @@
|
||||||
|
<RCC>
|
||||||
|
<qresource prefix="/font">
|
||||||
|
<file>逍遥行书.ttf</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
|
@ -0,0 +1,113 @@
|
||||||
|
#include "handle.h"
|
||||||
|
|
||||||
|
Handle::Handle(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
setAutoFillBackground(true);
|
||||||
|
setPalette(QPalette(Qt::transparent));
|
||||||
|
resize(200,200);
|
||||||
|
setMinimumSize(100,100);
|
||||||
|
mouseX=width()/2;
|
||||||
|
mouseY=height()/2;
|
||||||
|
tim=new QTimer(this);
|
||||||
|
connect(tim,&QTimer::timeout,this,[=]{
|
||||||
|
emit keyNumchanged(getKeyNum());
|
||||||
|
});
|
||||||
|
connect(this,&Handle::keyNumchanged,this,[=](int num){
|
||||||
|
qDebug()<<num<<Qt::endl;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle::~Handle()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
void Handle::paintEvent(QPaintEvent *){
|
||||||
|
|
||||||
|
QPainter painter(this);
|
||||||
|
|
||||||
|
int side = qMin(width(), height());
|
||||||
|
|
||||||
|
padR=side/2.0; //底盘半径
|
||||||
|
padX=padR;//底盘圆心
|
||||||
|
padY=padR;//底盘圆心
|
||||||
|
handleR=padR/4;//摇杆圆半径
|
||||||
|
int handleMaxR=padR-handleR;
|
||||||
|
QColor handleColor(Qt::gray);
|
||||||
|
//加载底盘图像
|
||||||
|
/*painter.save();
|
||||||
|
|
||||||
|
painter.scale(side / 400.0, side / 400.0);//坐标会随窗口缩放
|
||||||
|
painter.drawPixmap(0, 0, QPixmap(":/image/pad.png"));
|
||||||
|
painter.restore();*/
|
||||||
|
|
||||||
|
//自绘底盘
|
||||||
|
painter.save();
|
||||||
|
QRadialGradient RadialGradient(padR,padR,padR*3,padR,padR);//圆心2,半径1,焦点2
|
||||||
|
RadialGradient.setColorAt(0,QColor(90,90,90,127));//渐变
|
||||||
|
RadialGradient.setColorAt(1,QColor(255,255,255,190));//渐变
|
||||||
|
painter.setBrush(RadialGradient);
|
||||||
|
painter.setPen(Qt::NoPen);
|
||||||
|
painter.drawEllipse(QPoint(padR,padR),side/2,side/2);//大圆盘
|
||||||
|
painter.restore();
|
||||||
|
|
||||||
|
//painter.drawText(20,20,tr("%1,%2,%3").arg(mouseX).arg(mouseY).arg(handPadDis));
|
||||||
|
|
||||||
|
if(!mousePressed){//鼠标没按下则摇杆恢复到底盘中心
|
||||||
|
mouseX=padX;
|
||||||
|
mouseY=padY;
|
||||||
|
}
|
||||||
|
handPadDis=Pointdis(padR,padR,mouseX,mouseY);
|
||||||
|
if(handPadDis<=handleMaxR){
|
||||||
|
handleX=mouseX;
|
||||||
|
handleY=mouseY;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
handleX=(int)(handleMaxR*(mouseX-padX)/handPadDis+padX);
|
||||||
|
handleY=(int)(handleMaxR*(mouseY-padY)/handPadDis+padY);
|
||||||
|
}
|
||||||
|
// painter.drawText(200,200,tr("%1,%2,%3").arg(handleX).arg(handleY).arg(handPaddis));
|
||||||
|
painter.setPen(Qt::NoPen);
|
||||||
|
painter.setBrush(handleColor);
|
||||||
|
painter.drawEllipse(QPoint(handleX,handleY),handleR,handleR);//摇杆
|
||||||
|
}
|
||||||
|
void Handle::mouseMoveEvent(QMouseEvent* event){
|
||||||
|
static bool r=false;
|
||||||
|
mouseX=event->pos().x();
|
||||||
|
mouseY=event->pos().y();
|
||||||
|
if(r==true){
|
||||||
|
update();
|
||||||
|
r=false;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
r=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Handle::mouseReleaseEvent(QMouseEvent* event){
|
||||||
|
mouseX=width()/2;
|
||||||
|
mouseY=height()/2;
|
||||||
|
tim->stop();
|
||||||
|
mousePressed=false;
|
||||||
|
emit keyNumchanged(Handle::stop);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
void Handle::mousePressEvent(QMouseEvent* event){
|
||||||
|
mouseX=event->pos().x();
|
||||||
|
mouseY=event->pos().y();
|
||||||
|
tim->start(100);
|
||||||
|
mousePressed=true;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
double Handle::Pointdis(int a,int b,int x,int y){
|
||||||
|
return sqrt((double)((x-a)*(x-a)+(y-b)*(y-b)));
|
||||||
|
}
|
||||||
|
int Handle::getKeyNum(){
|
||||||
|
int x,y;
|
||||||
|
int keynum;
|
||||||
|
x=(int)(handleX*3.0/(padR*2));
|
||||||
|
y=(int)(handleY*3.0/(padR*2));
|
||||||
|
keynum=3*y+x;
|
||||||
|
return keynum;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#ifndef HANDLE_H
|
||||||
|
#define HANDLE_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QDrag>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
#include <QtMath>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QDebug>
|
||||||
|
class Handle : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
Handle(QWidget *parent = 0);
|
||||||
|
~Handle();
|
||||||
|
enum {upleft=0,up,upright,left,stop,right,downleft,down,downright};
|
||||||
|
signals:
|
||||||
|
void keyNumchanged(int num);
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *event)override;
|
||||||
|
void mouseMoveEvent(QMouseEvent *event)override;
|
||||||
|
void mouseReleaseEvent(QMouseEvent *event)override;
|
||||||
|
void mousePressEvent(QMouseEvent *event)override;
|
||||||
|
// void resizeEvent(QResizeEvent *event)override;
|
||||||
|
private:
|
||||||
|
int mouseX;
|
||||||
|
int mouseY;
|
||||||
|
int handleX;//摇杆
|
||||||
|
int handleY;
|
||||||
|
int handleR;
|
||||||
|
int padX;//底盘
|
||||||
|
int padY;
|
||||||
|
int padR;
|
||||||
|
double handPadDis;//两圆圆心距离
|
||||||
|
bool mousePressed;
|
||||||
|
QTimer *tim;
|
||||||
|
private:
|
||||||
|
double Pointdis(int a,int b,int x,int y);//两点距离
|
||||||
|
int getKeyNum();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // HANDLE_H
|
||||||
|
|
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 920 B |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 123 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 123 KiB |
After Width: | Height: | Size: 352 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 7.1 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 9.2 KiB |
|
@ -0,0 +1,10 @@
|
||||||
|
<RCC>
|
||||||
|
<qresource prefix="/image">
|
||||||
|
<file>pad.png</file>
|
||||||
|
<file>bottom.png</file>
|
||||||
|
<file>logo.png</file>
|
||||||
|
<file>wallpaper.JPG</file>
|
||||||
|
<file>icon.icns</file>
|
||||||
|
<file>bottom-1.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 270 KiB |
|
@ -0,0 +1,12 @@
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
MainWindow w;
|
||||||
|
w.show();
|
||||||
|
return a.exec();
|
||||||
|
}
|
|
@ -0,0 +1,201 @@
|
||||||
|
#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';
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include "qmqtt.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class MainWindow; }
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_connectButton_clicked();
|
||||||
|
void connected_handler();
|
||||||
|
void disconnected_handler();
|
||||||
|
void received_handler(const QMQTT::Message& message);
|
||||||
|
void pingresp_handler();
|
||||||
|
void subscribed_handler(const QString& topic, const quint8 qos);
|
||||||
|
void error_handler(const QMQTT::ClientError error);
|
||||||
|
|
||||||
|
void on_disconnectButton_clicked();
|
||||||
|
|
||||||
|
void on_log_textChanged();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void on_right_r_pressed();
|
||||||
|
|
||||||
|
void on_right_r_released();
|
||||||
|
|
||||||
|
void on_left_r_pressed();
|
||||||
|
|
||||||
|
void on_left_r_released();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
QMQTT::Client *client;
|
||||||
|
QTimer *left_r,*right_r;
|
||||||
|
uint8_t key = -1;
|
||||||
|
};
|
||||||
|
#endif // MAINWINDOW_H
|
|
@ -0,0 +1,507 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>485</width>
|
||||||
|
<height>795</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>物联网小车控制器</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="documentMode">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="tabShape">
|
||||||
|
<enum>QTabWidget::Triangular</enum>
|
||||||
|
</property>
|
||||||
|
<property name="dockNestingEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="unifiedTitleAndToolBarOnMac">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<layout class="QGridLayout" name="gridLayout" rowstretch="5,1,1,1,10,10,1,1" columnstretch="1,5,5,5,5,1">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0" rowspan="3" colspan="6">
|
||||||
|
<widget class="QLabel" name="logoLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>字魂49号-逍遥行书</family>
|
||||||
|
<pointsize>44</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::LeftToRight</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>物联网小车控制器</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0" colspan="6">
|
||||||
|
<widget class="QLabel" name="Button">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>2000</width>
|
||||||
|
<height>2000</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>1</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="image.qrc">:/image/bottom-1.png</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0" rowspan="3">
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="5" rowspan="3">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1" rowspan="3" colspan="4">
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="tabPosition">
|
||||||
|
<enum>QTabWidget::North</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tabShape">
|
||||||
|
<enum>QTabWidget::Triangular</enum>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="usesScrollButtons">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="documentMode">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="tabBarAutoHide">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="rockerTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>控制器</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_5" columnstretch="8,1,1,8" rowminimumheight="1,200,1,1">
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QPushButton" name="right_r">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>顺时针转🔃</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="4">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>1</width>
|
||||||
|
<height>1</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<spacer name="horizontalSpacer_8">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" colspan="2">
|
||||||
|
<widget class="Handle" name="rocker" native="true">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QPushButton" name="left_r">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>逆时针转🔄</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3">
|
||||||
|
<spacer name="horizontalSpacer_9">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="4">
|
||||||
|
<spacer name="verticalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="MQTTTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>MQTT服务器</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4" rowstretch="5,5,5,1" columnstretch="1,5,5,5,1">
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="addressLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>服务器地址:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="3">
|
||||||
|
<widget class="QPushButton" name="disconnectButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>断开</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="portLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>服务器端口:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<spacer name="horizontalSpacer_7">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="ctrlTopiLlabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>控制Topic:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="portEdit">
|
||||||
|
<property name="text">
|
||||||
|
<string>11883</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="4">
|
||||||
|
<spacer name="horizontalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="addressEdit">
|
||||||
|
<property name="text">
|
||||||
|
<string>mqtt.ourdocs.cn</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="ctrlTopicEdit">
|
||||||
|
<property name="text">
|
||||||
|
<string>/Car</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QPushButton" name="connectButton">
|
||||||
|
<property name="text">
|
||||||
|
<string> 连接</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="logTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>日志</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>12</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTextBrowser" name="log"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="infoTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>关于</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3" rowstretch="1,5,5,1">
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="copyrightLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Comic Sans MS</family>
|
||||||
|
<pointsize>19</pointsize>
|
||||||
|
<italic>false</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>©2021
|
||||||
|
Made By Mentalflow.</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="sloganLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>字魂49号-逍遥行书</family>
|
||||||
|
<pointsize>27</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>为电子设计综合实验设计</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2" colspan="2">
|
||||||
|
<widget class="QLabel" name="Logo">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="image.qrc">:/image/logo.png</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="2">
|
||||||
|
<spacer name="horizontalSpacer_5">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="4" colspan="2">
|
||||||
|
<spacer name="horizontalSpacer_6">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<action name="action">
|
||||||
|
<property name="text">
|
||||||
|
<string>关于</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>Handle</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>handle.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources>
|
||||||
|
<include location="image.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -0,0 +1,34 @@
|
||||||
|
QT += core gui
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets qmqtt
|
||||||
|
|
||||||
|
CONFIG += c++11
|
||||||
|
ICON = icon.icns
|
||||||
|
TARGET = IoTCar
|
||||||
|
# You can make your code fail to compile if it uses deprecated APIs.
|
||||||
|
# In order to do so, uncomment the following line.
|
||||||
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
handle.cpp \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
handle.h \
|
||||||
|
mainwindow.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
mainwindow.ui
|
||||||
|
|
||||||
|
TRANSLATIONS += \
|
||||||
|
test_zh_CN.ts
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|
||||||
|
RESOURCES += \
|
||||||
|
font.qrc \
|
||||||
|
image.qrc
|
|
@ -0,0 +1,3 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="zh_CN"></TS>
|
After Width: | Height: | Size: 565 KiB |