接前面几篇文章:
圆曾经的小车梦,造一台智能小车(三)之小车前进后退左右转基本框架
QT控制界面大致如下,非常简单:
包含前进、后退、左转、右转4个按钮,外加一个显示
如何来实现呢?很简单。
一、分别拖四个QPushButton按钮过去
改成自己想要表达的方式
二、再拖一个textBrowser
三、设置按钮转到槽
主要是设置按钮的具体功能,比如单击、按下,释放等等,当发现这些动作的时候就会触发对应的槽函数。
鼠标右键对应的按钮,然后选择转到槽
这里我们分别选择pressed()和released()这两个信号,意思是按下和释放,然后点击OK,程序就会自动生成对应的槽函数,依次类推,我们为前进、后退、左转、右转这四个按钮都这么来设置。
由于我们要控制的是Wifi小车,所以需要在.pro中包含:network
网络模块
QT += core gui network
接下来看mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> //包含对应的头文件 #include <QTcpSocket> #include <QDebug> #include <QString> #include <QByteArray> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: /*网络处理相关*/ void ReadData(); void ReadError(QAbstractSocket::SocketError); /*对应的四个按钮的按下和释放的槽函数,由系统自动生成*/ void on_go_released(); void on_back_released(); void on_go_pressed(); void on_back_pressed(); void on_turn_left_pressed(); void on_turn_right_pressed(); void on_turn_left_released(); void on_turn_right_released(); private: Ui::MainWindow *ui; QTcpSocket *client ; }; #endif // MAINWINDOW_H
mainwindow.cpp实现:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); this->setWindowTitle(tr("智能小车控制%1%2").arg(tr("----2020年5月19日")).arg(tr("----开发者:杨源鑫"))); client = new QTcpSocket(this); client->abort(); //连接TCP客户端处理相关的信号与槽 connect(client,SIGNAL(readyRead()),this,SLOT(ReadData())); connect(client,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(ReadError(QAbstractSocket::SocketError))); //连接服务器 client->connectToHost("192.168.4.1",8080); if (client->waitForConnected(1000)) ui->label->setText("已连接智能小车"); else ui->label->setText("连接智能小车失败!"); } void MainWindow::ReadData() { QByteArray buffer = client->readAll(); if(!buffer.isEmpty()) ui->textBrowser->append(buffer); } void MainWindow::ReadError(QAbstractSocket::SocketError) { client->disconnectFromHost(); } void MainWindow::on_go_pressed() { QString data = "GO"; ui->textBrowser->setText("前进"); client->write(data.toLatin1()); //qt5去除了.toAscii() } void MainWindow::on_back_pressed() { QString data = "BACK"; ui->textBrowser->setText("后退"); client->write(data.toLatin1()); //qt5去除了.toAscii() } void MainWindow::on_turn_left_pressed() { QString data = "LEFT"; ui->textBrowser->setText("左转"); client->write(data.toLatin1()); //qt5去除了.toAscii() } void MainWindow::on_turn_right_pressed() { QString data = "RIGHT"; ui->textBrowser->setText("右转"); client->write(data.toLatin1()); //qt5去除了.toAscii() } void MainWindow::on_turn_left_released() { QString data = "STOP"; client->write(data.toLatin1()); //qt5去除了.toAscii() } void MainWindow::on_turn_right_released() { QString data = "STOP"; client->write(data.toLatin1()); //qt5去除了.toAscii() } void MainWindow::on_go_released() { QString data = "STOP"; client->write(data.toLatin1()); //qt5去除了.toAscii() } void MainWindow::on_back_released() { QString data = "STOP"; client->write(data.toLatin1()); //qt5去除了.toAscii() } MainWindow::~MainWindow() { delete client ; delete ui; }
运行结果:
在运行前,先连接好Wifi网络,由于我的电脑是无线网络,所以直接连接无线就好了,然后确保服务器和端口号是否正确,接下来就可以玩耍啦!
QT是支持跨平台的,后续,我们将把这个QT程序移植到ARM开发平台上去,用ARM开发板上的wifi连接小车,然后用它来进行控制小车,这样就可以脱离PC程序控制了,敬请期待!
案例下载
公众号后台回复QT控制小车
即可获取。