影醉阏轩窗

衣带渐宽终不悔,为伊消得人憔悴。
扩大
缩小

QT编写TCP入门+简单的实际项目(附源程序)

我个人感觉学习QT不需要那么深入的了解,因为我就是编写一下界面来实现理想的功能而已,我不是靠这个吃饭,当然以后要是从事这个方向那就好好深入底层好好学了。

学习QT的TCP:第一步:去百度看看TCP的介绍,大概了解一下。

                      第二步:先看看QT的关于TCP的帮助文档,QTcreator里面有的,也大概看一下。

                      第三步:直接下载一个源程序撸代码,先看懂程序然后对着对着源程序加上自己的理解,再重新码一遍就行了。

                      第四步:根据自己的需要修改界面。

非专业的人真心没必要去深入学习!!

TCP客户端界面:

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 
  4 MainWindow::MainWindow(QWidget *parent) :
  5     QMainWindow(parent),
  6     ui(new Ui::MainWindow)
  7 {
  8     ui->setupUi(this);
  9     ui->sendButton->setEnabled(false);
 10     ui->disconnectButton->setEnabled(false);
 11     ui->IPLineEdit->setText("192.168.3.4");
 12     ui->portLineEdit->setText("4001");
 13     tcpSocket = NULL;//使用前先清空
 14 }
 15 
 16 MainWindow::~MainWindow()
 17 {
 18     delete tcpSocket;
 19     delete ui;
 20 }
 21 
 22 void MainWindow::sendMassage(){}
 23 
 24 void MainWindow::readMassage()
 25 {
 26     QByteArray data=tcpSocket->readAll();
 27     ui->clearLineEdit->setText(QString(data));
 28 }
 29 
 30 void MainWindow::displayError(QAbstractSocket::SocketError)
 31 {
 32     QMessageBox::warning (this, tr("Warnning"), tcpSocket->errorString ());
 33     tcpSocket->close ();
 34     ui->connnectButton->setEnabled (true);
 35     ui->disconnectButton->setEnabled (false);
 36     ui->sendButton->setEnabled (false);
 37 }
 38 
 39 void MainWindow::on_sendButton_clicked()
 40 {
 41     QString sendmessage;
 42     sendmessage = ui->sendLineEdit->text();
 43    /* if(sendmessage == NULL) return;
 44     QByteArray block;//暂时存储我们需要发送的数据
 45     QDataStream out(&block,QIODevice::WriteOnly);//TCP必须和数据流一起使用
 46     out.setVersion(QDataStream::Qt_5_7);//设置数据流的版本(服务器和主机版本一定相同)
 47     out << sendmessage;
 48     tcpSocket->write(block);*/
 49     QByteArray data;
 50     data.append(sendmessage);
 51     tcpSocket->write(data);
 52 }
 53 
 54 void MainWindow::on_clearButton_clicked()
 55 {
 56     ui->clearLineEdit->clear();
 57 }
 58 
 59 void MainWindow::on_connnectButton_clicked()
 60 {
 61     flag = false;
 62     if(tcpSocket) delete tcpSocket;//如果有指向其他空间直接删除
 63     tcpSocket = new QTcpSocket(this);//申请堆空间有TCP发送和接受操作
 64     tcpIp = ui->IPLineEdit->text();
 65     tcpPort = ui->portLineEdit->text();
 66     if(tcpIp==NULL||tcpPort==NULL)//判断IP和PORT是否为空
 67     {
 68         QMessageBox msgBox;
 69         msgBox.setText("IP or PORT is Empty");
 70         msgBox.exec();
 71         return;
 72     }
 73     tcpSocket->connectToHost(tcpIp,tcpPort.toInt());//连接主机
 74     connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,
 75             SLOT(displayError(QAbstractSocket::SocketError)));//错误连接
 76     connect(tcpSocket,SIGNAL(connected()),this,
 77             SLOT(connectUpdata()));//更新连接之后按钮的使能
 78     connect(tcpSocket,SIGNAL(readyRead()),this,
 79             SLOT(readMassage()));//读取信息的连接
 80     ui->connnectButton->setEnabled (false);
 81     ui->disconnectButton->setEnabled (true);
 82 
 83 }
 84 
 85 void MainWindow::on_disconnectButton_clicked()
 86 {
 87     tcpSocket->abort();
 88     delete tcpSocket;
 89     tcpSocket=NULL;
 90     disconnectUpdata();
 91 }
 92 
 93 void MainWindow::connectUpdata()
 94 {
 95     if(!flag)
 96     {
 97         QMessageBox msgBox;
 98         msgBox.setText("TCP connect successful");
 99         msgBox.exec();
100         ui->connnectButton->setEnabled(false);
101         ui->sendButton->setEnabled(true);
102         ui->disconnectButton->setEnabled(true);
103         ui->IPLineEdit->setEnabled(false);
104         ui->portLineEdit->setEnabled(false);
105     }
106     flag=true;
107 }
108 
109 void MainWindow::disconnectUpdata()
110 {
111     ui->connnectButton->setEnabled(true);
112     ui->sendButton->setEnabled(false);
113     ui->disconnectButton->setEnabled(false);
114     ui->IPLineEdit->setEnabled(true);
115     ui->portLineEdit->setEnabled(true);
116 }
 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QTcpServer>
 6 #include <QTcpSocket>
 7 #include <QMessageBox>
 8 namespace Ui {
 9 class MainWindow;
10 }
11 
12 class MainWindow : public QMainWindow
13 {
14     Q_OBJECT
15 
16 public:
17     explicit MainWindow(QWidget *parent = 0);
18     ~MainWindow();
19 private slots:
20    void sendMassage();
21    void readMassage();
22    void displayError(QAbstractSocket::SocketError);
23    void connectUpdata();
24    void disconnectUpdata();
25    void on_sendButton_clicked();
26    void on_clearButton_clicked();
27    void on_connnectButton_clicked();
28    void on_disconnectButton_clicked();
29 
30 private:
31    //QTcpServer *tcpServer;//不用再建立服务器类了,直接建立下面的套接字
32    QTcpSocket *tcpSocket;//直接建立TCP套接字类
33    QString tcpIp;//存储IP地址
34    QString tcpPort;//存储端口地址
35    bool flag;
36    Ui::MainWindow *ui;
37 
38 };
39 
40 #endif // MAINWINDOW_H
 1 #-------------------------------------------------
 2 #
 3 # Project created by QtCreator 2017-02-23T10:33:02
 4 #
 5 #-------------------------------------------------
 6 
 7 QT       += core gui
 8 QT       += network
 9 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
10 
11 TARGET = TCP_Server
12 TEMPLATE = app
13 
14 # The following define makes your compiler emit warnings if you use
15 # any feature of Qt which as been marked as deprecated (the exact warnings
16 # depend on your compiler). Please consult the documentation of the
17 # deprecated API in order to know how to port your code away from it.
18 DEFINES += QT_DEPRECATED_WARNINGS
19 
20 # You can also make your code fail to compile if you use deprecated APIs.
21 # In order to do so, uncomment the following line.
22 # You can also select to disable deprecated APIs only up to a certain version of Qt.
23 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
24 
25 
26 SOURCES += main.cpp\
27         mainwindow.cpp
28 
29 HEADERS  += mainwindow.h
30 
31 FORMS    += mainwindow.ui

 下载路径:QT_TCP客户端简单设计

 

基于TCP的简单应用程序:

                                   Qstring->16进制->TCP->WIFI->串口->CPU->电机

 

 

源程序奉上:

 

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 
  4 MainWindow::MainWindow(QWidget *parent) :
  5     QMainWindow(parent),
  6     ui(new Ui::MainWindow)
  7 {
  8     ui->setupUi(this);
  9 
 10     ui->speedSlider->setMinimum(0);
 11     ui->speedSlider->setMaximum(200);
 12     ui->speedSlider->setPageStep(50);
 13     ui->speedSlider->setTickPosition(QSlider::TicksAbove);
 14     ui->timeSlider->setMinimum(0);
 15     ui->timeSlider->setMaximum(200);
 16     ui->timeSlider->setPageStep(50);
 17     ui->timeSlider->setTickPosition(QSlider::TicksAbove);
 18     ui->speedLineEdit->setText(tr("0"));
 19     ui->timeLineEdit->setText(tr("0"));
 20     ui->timeLineEdit->setEnabled(false);
 21     ui->speedLineEdit->setEnabled(false);
 22     ui->pushButton->setEnabled(false);
 23     ui->pushButton_2->setEnabled(false);
 24 
 25     ui->sendButton->setEnabled(false);
 26     ui->disconnectButton->setEnabled(false);
 27     ui->IPLineEdit->setText("192.168.3.4");
 28     ui->portLineEdit->setText("4001");
 29     tcpSocket = NULL;//使用前先清空
 30 
 31     my_class->g_data[0] = 170;
 32     my_class->g_data[1] = 85;
 33     for(int i=2;i<7;++i) my_class->g_data[i] = 0;
 34     my_class->g_flag = 1;
 35 
 36 
 37 }
 38 
 39 MainWindow::~MainWindow()
 40 {
 41     delete tcpSocket;
 42     delete my_class;
 43     delete ui;
 44 
 45 }
 46 
 47 void MainWindow::sendMassage(){}
 48 
 49 void MainWindow::readMassage()
 50 {
 51     QByteArray data=tcpSocket->readAll();
 52     QString p = data.toHex();
 53     ui->clearLineEdit->setText(p);
 54     //------把接受到的Qbyte转化成Qstring然后转化成int--------//
 55     //qDebug()<<p.toInt(0,16);
 56     qDebug()<<p;
 57     int temp;
 58     if(my_class->g_data[3]>8) temp = my_class->g_data[3]-8;
 59     else temp = my_class->g_data[3];
 60     temp = temp*16 + my_class->g_roll;
 61     if(p.toInt(0,16) == temp)
 62     {
 63         ui->pushButton_2->setEnabled(false);
 64         ui->pushButton->setEnabled(true);
 65         ui->speedSlider->setEnabled(true);
 66         ui->timeSlider->setEnabled(true);
 67         my_class->g_flag = 1;
 68     }
 69 }
 70 
 71 void MainWindow::displayError(QAbstractSocket::SocketError)
 72 {
 73     QMessageBox::warning (this, tr("Warnning"), tcpSocket->errorString ());
 74     tcpSocket->close ();
 75     ui->connnectButton->setEnabled (true);
 76     ui->disconnectButton->setEnabled (false);
 77     ui->sendButton->setEnabled (false);
 78 }
 79 
 80 void MainWindow::on_sendButton_clicked()
 81 {
 82     QString sendmessage;
 83     sendmessage = ui->sendLineEdit->text();
 84    /* if(sendmessage == NULL) return;
 85     QByteArray block;//暂时存储我们需要发送的数据
 86     QDataStream out(&block,QIODevice::WriteOnly);//TCP必须和数据流一起使用
 87     out.setVersion(QDataStream::Qt_5_7);//设置数据流的版本(服务器和主机版本一定相同)
 88     out << sendmessage;
 89     tcpSocket->write(block);*/
 90 
 91     QByteArray data;
 92     data.append(sendmessage);
 93     tcpSocket->write(QString2Hex(sendmessage));
 94 }
 95 
 96 //将字符型进制转化为16进制
 97 QByteArray MainWindow::QString2Hex(QString str)
 98     {
 99         QByteArray senddata;
100         int hexdata,lowhexdata;
101         int hexdatalen = 0;
102         int len = str.length();
103         senddata.resize(len/2);
104         char lstr,hstr;
105         for(int i=0; i<len; )
106         {
107             hstr=str[i].toLatin1();   //字符型
108             if(hstr == ' ')
109             {
110                 i++;
111                 continue;
112             }
113             i++;
114             if(i >= len)
115                 break;
116             lstr = str[i].toLatin1();
117             hexdata = ConvertHexChar(hstr);
118             lowhexdata = ConvertHexChar(lstr);
119             if((hexdata == 16) || (lowhexdata == 16))
120                 break;
121             else
122                 hexdata = hexdata*16+lowhexdata;
123             i++;
124             senddata[hexdatalen] = (char)hexdata;
125             hexdatalen++;
126         }
127         senddata.resize(hexdatalen);
128         return senddata;
129     }
130  //将1-9 a-f字符转化为对应的整数
131 int MainWindow::ConvertHexChar(char ch)
132     {
133         if((ch >= '0') && (ch <= '9'))
134          return ch-'0';
135         else if((ch >= 'A') && (ch <= 'F'))
136          return ch-'A'+10;
137         else if((ch >= 'a') && (ch <= 'f'))
138          return ch-'a'+10;
139         else return (-1);
140     }
141 
142 void MainWindow::on_clearButton_clicked()
143 {
144     ui->clearLineEdit->clear();
145 }
146 
147 void MainWindow::on_connnectButton_clicked()
148 {
149     flag = false;
150     if(tcpSocket) delete tcpSocket;//如果有指向其他空间直接删除
151     tcpSocket = new QTcpSocket(this);//申请堆空间有TCP发送和接受操作
152     tcpIp = ui->IPLineEdit->text();
153     tcpPort = ui->portLineEdit->text();
154     if(tcpIp==NULL||tcpPort==NULL)//判断IP和PORT是否为空
155     {
156         QMessageBox msgBox;
157         msgBox.setText("IP or PORT is Empty");
158         msgBox.exec();
159         return;
160     }
161     tcpSocket->connectToHost(tcpIp,tcpPort.toInt());//连接主机
162     connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,
163             SLOT(displayError(QAbstractSocket::SocketError)));//错误连接
164     connect(tcpSocket,SIGNAL(connected()),this,
165             SLOT(connectUpdata()));//更新连接之后按钮的使能
166     connect(tcpSocket,SIGNAL(readyRead()),this,
167             SLOT(readMassage()));//读取信息的连接
168     ui->connnectButton->setEnabled (false);
169     ui->disconnectButton->setEnabled (true);
170 
171 }
172 
173 void MainWindow::on_disconnectButton_clicked()
174 {
175     ui->pushButton_2->setEnabled(false);
176     ui->pushButton->setEnabled(true);
177     ui->speedSlider->setEnabled(true);
178     ui->timeSlider->setEnabled(true);
179     my_class->g_flag = 1;
180 
181     tcpSocket->abort();
182     delete tcpSocket;
183     tcpSocket=NULL;
184     disconnectUpdata();   
185 }
186 
187 void MainWindow::connectUpdata()
188 {
189     if(!flag)
190     {
191         QMessageBox msgBox;
192         msgBox.setText("TCP connect successful");
193         msgBox.exec();
194 
195         ui->pushButton->setEnabled(true);//发送使能
196 
197         ui->connnectButton->setEnabled(false);
198         ui->sendButton->setEnabled(true);
199         ui->disconnectButton->setEnabled(true);
200         ui->IPLineEdit->setEnabled(false);
201         ui->portLineEdit->setEnabled(false);
202     }
203     flag=true;
204 }
205 
206 void MainWindow::disconnectUpdata()
207 {
208     ui->connnectButton->setEnabled(true);
209     ui->sendButton->setEnabled(false);
210     ui->disconnectButton->setEnabled(false);
211     ui->IPLineEdit->setEnabled(true);
212     ui->portLineEdit->setEnabled(true);
213     ui->pushButton->setEnabled(false);//发送使能
214     ui->pushButton_2->setEnabled(false);
215 }
216 
217 void MainWindow::on_speedSlider_valueChanged(int value)
218 {
219     value = value;
220     int speedValue = ui->speedSlider->value();
221     if(speedValue>0&&speedValue<=25)
222     {
223         ui->speedSlider->setValue(0);
224         my_class->g_data[4] = 1;
225     }
226     else if(speedValue>25&&speedValue<=75)
227     {
228         ui->speedSlider->setValue(50);
229         my_class->g_data[4] = 3;
230     }
231     else if(speedValue>75&&speedValue<=125)
232     {
233         ui->speedSlider->setValue(100);
234         my_class->g_data[4] = 5;
235     }
236     else if(speedValue>125&&speedValue<=175)
237     {
238         ui->speedSlider->setValue(150);
239         my_class->g_data[4] = 7;
240     }
241     else if(speedValue>175)
242     {
243         ui->speedSlider->setValue(200);
244         my_class->g_data[4] = 9;
245     }
246     speedValue = ui->speedSlider->value();
247     QString str = QString("%1").arg(speedValue);//int型转化成QString显示
248     ui->speedLineEdit->setText(str);
249    // my_class->g_speed = speedValue;
250 }
251 
252 void MainWindow::on_timeSlider_valueChanged(int value)
253 {
254     value = value;
255     int timeValue = ui->timeSlider->value();
256     if(timeValue>0&&timeValue<=25)
257     {
258         ui->timeSlider->setValue(0);
259         my_class->g_data[5] = 9;
260     }
261     else if(timeValue>25&&timeValue<=75)
262     {
263         ui->timeSlider->setValue(50);
264         my_class->g_data[5] = 7;
265     }
266     else if(timeValue>75&&timeValue<=125)
267     {
268         ui->timeSlider->setValue(100);
269         my_class->g_data[5] = 5;
270     }
271     else if(timeValue>125&&timeValue<=175)
272     {
273         ui->timeSlider->setValue(150);
274         my_class->g_data[5] = 3;
275     }
276     else if(timeValue>175)
277     {
278         ui->timeSlider->setValue(200);
279         my_class->g_data[5] = 1;
280     }
281     timeValue = ui->timeSlider->value();
282     QString str = QString("%1").arg(timeValue);//int型转化成QString显示
283     ui->timeLineEdit->setText(str);
284     //my_class->g_time = timeValue;
285 }
286 
287 void MainWindow::on_pushButton_clicked()
288 {
289 
290     ui->pushButton->setEnabled(false);//发送使能
291     ui->pushButton_2->setEnabled(true);
292     //板子编号取值
293     bool flag =true;
294     if(my_class->g_data[3]>8)
295     {
296         my_class->g_data[2] =2;
297         my_class->g_data[3]-=8;
298         flag = true;
299     }
300     else
301     {
302         flag = false;
303         my_class->g_data[2] = 1;
304     }//电机号和正反转取值
305     my_class->g_data[3] =my_class->g_data[3]*16 + my_class->g_roll;
306     //校验位取值
307     int num;
308     num = my_class->g_data[3]+my_class->g_data[4]+my_class->g_data[5];
309     my_class->g_data[6] = num % 256;
310     //------------十进制转化成QString然后再转化成长十六进制发送------//
311     qDebug()<<"number:";
312     QString a1;
313     for(int j=0;j<7;j++)
314     {
315         if(my_class->g_data[j]<16)
316         a1+='0'+QString::number(my_class->g_data[j], 16).toUpper();
317         else a1+=QString::number(my_class->g_data[j], 16).toUpper();
318     }
319     qDebug()<<a1;
320     //QByteArray data;
321     //data.append(a1);
322     //tcpSocket->write(data);
323     tcpSocket->write(QString2Hex(a1));
324     my_class->g_data[3] = (my_class->g_data[3]-my_class->g_roll)/16;
325    if(flag) my_class->g_data[3]+=8;
326 
327 
328     ui->speedSlider->setEnabled(false);
329     ui->timeSlider->setEnabled(false);
330     my_class->g_flag = 0;
331     switch (my_class->g_data[3]) {
332     case 1:if(my_class->g_roll==1) ui->display1->setChecked(true);
333            else ui->display1->setChecked(false);
334         break;
335     case 2:if(my_class->g_roll==1) ui->display2->setChecked(true);
336            else ui->display2->setChecked(false);
337         break;
338     case 3:if(my_class->g_roll==1) ui->display3->setChecked(true);
339            else ui->display3->setChecked(false);
340         break;
341     case 4:if(my_class->g_roll==1) ui->display4->setChecked(true);
342            else ui->display4->setChecked(false);
343         break;
344     case 5:if(my_class->g_roll==1) ui->display5->setChecked(true);
345            else ui->display5->setChecked(false);
346         break;
347     case 6:if(my_class->g_roll==1) ui->display6->setChecked(true);
348            else ui->display6->setChecked(false);
349         break;
350     case 7:if(my_class->g_roll==1) ui->display7->setChecked(true);
351            else ui->display7->setChecked(false);
352         break;
353     case 8:if(my_class->g_roll==1) ui->display8->setChecked(true);
354            else ui->display8->setChecked(false);
355         break;
356     case 9:if(my_class->g_roll==1) ui->display9->setChecked(true);
357            else ui->display9->setChecked(false);
358         break;
359     case 10:if(my_class->g_roll==1) ui->display10->setChecked(true);
360            else ui->display10->setChecked(false);
361         break;
362     case 11:if(my_class->g_roll==1) ui->display11->setChecked(true);
363            else ui->display11->setChecked(false);
364         break;
365     case 12:if(my_class->g_roll==1) ui->display12->setChecked(true);
366            else ui->display12->setChecked(false);
367         break;
368     case 13:if(my_class->g_roll==1) ui->display13->setChecked(true);
369            else ui->display13->setChecked(false);
370         break;
371     case 14:if(my_class->g_roll==1) ui->display14->setChecked(true);
372            else ui->display14->setChecked(false);
373         break;
374     case 15:if(my_class->g_roll==1) ui->display15->setChecked(true);
375            else ui->display15->setChecked(false);
376         break;
377     default:
378         break;
379     }
380 }
381 
382 
383 void MainWindow::on_motor1_clicked()
384 {
385 if(my_class->g_flag==1){
386     //my_class->g_motor = 1;
387     my_class->g_data[3] =1;
388     ui->motor1->setStyleSheet("color: red");
389     ui->motor2->setStyleSheet("color: black");//按键字颜色改变
390     ui->motor3->setStyleSheet("color: black");
391     ui->motor4->setStyleSheet("color: black");
392     ui->motor5->setStyleSheet("color: black");
393     ui->motor6->setStyleSheet("color: black");
394     ui->motor7->setStyleSheet("color: black");
395     ui->motor8->setStyleSheet("color: black");
396     ui->motor9->setStyleSheet("color: black");
397     ui->motor10->setStyleSheet("color: black");
398     ui->motor11->setStyleSheet("color: black");
399     ui->motor12->setStyleSheet("color: black");
400     ui->motor13->setStyleSheet("color: black");
401     ui->motor14->setStyleSheet("color: black");
402     ui->motor15->setStyleSheet("color: black");
403 }
404 }
405 
406 void MainWindow::on_motor2_clicked()
407 {
408 if(my_class->g_flag==1){
409     //my_class->g_motor = 2;
410     my_class->g_data[3] =2;
411     ui->motor2->setStyleSheet("color: red");
412     ui->motor1->setStyleSheet("color: black");
413     ui->motor3->setStyleSheet("color: black");
414     ui->motor4->setStyleSheet("color: black");
415     ui->motor5->setStyleSheet("color: black");
416     ui->motor6->setStyleSheet("color: black");
417     ui->motor7->setStyleSheet("color: black");
418     ui->motor8->setStyleSheet("color: black");
419     ui->motor9->setStyleSheet("color: black");
420     ui->motor10->setStyleSheet("color: black");
421     ui->motor11->setStyleSheet("color: black");
422     ui->motor12->setStyleSheet("color: black");
423     ui->motor13->setStyleSheet("color: black");
424     ui->motor14->setStyleSheet("color: black");
425     ui->motor15->setStyleSheet("color: black");
426 }
427 }
428 
429 void MainWindow::on_motor3_clicked()
430 {
431     if(my_class->g_flag==1){
432     //my_class->g_motor = 3;
433     my_class->g_data[3] =3;
434     ui->motor3->setStyleSheet("color: red");
435     ui->motor1->setStyleSheet("color: black");
436     ui->motor2->setStyleSheet("color: black");
437     ui->motor4->setStyleSheet("color: black");
438     ui->motor5->setStyleSheet("color: black");
439     ui->motor6->setStyleSheet("color: black");
440     ui->motor7->setStyleSheet("color: black");
441     ui->motor8->setStyleSheet("color: black");
442     ui->motor9->setStyleSheet("color: black");
443     ui->motor10->setStyleSheet("color: black");
444     ui->motor11->setStyleSheet("color: black");
445     ui->motor12->setStyleSheet("color: black");
446     ui->motor13->setStyleSheet("color: black");
447     ui->motor14->setStyleSheet("color: black");
448     ui->motor15->setStyleSheet("color: black");}
449 }
450 
451 void MainWindow::on_motor4_clicked()
452 {
453     if(my_class->g_flag==1){
454     //my_class->g_motor = 4;
455     my_class->g_data[3] =4;
456     ui->motor3->setStyleSheet("color: black");
457     ui->motor1->setStyleSheet("color: black");
458     ui->motor2->setStyleSheet("color: black");
459     ui->motor4->setStyleSheet("color: red");
460     ui->motor5->setStyleSheet("color: black");
461     ui->motor6->setStyleSheet("color: black");
462     ui->motor7->setStyleSheet("color: black");
463     ui->motor8->setStyleSheet("color: black");
464     ui->motor9->setStyleSheet("color: black");
465     ui->motor10->setStyleSheet("color: black");
466     ui->motor11->setStyleSheet("color: black");
467     ui->motor12->setStyleSheet("color: black");
468     ui->motor13->setStyleSheet("color: black");
469     ui->motor14->setStyleSheet("color: black");
470     ui->motor15->setStyleSheet("color: black");}
471 }
472 
473 void MainWindow::on_motor5_clicked()
474 {
475     if(my_class->g_flag==1){
476     //my_class->g_motor = 5;
477     my_class->g_data[3] =5;
478     ui->motor3->setStyleSheet("color: black");
479     ui->motor1->setStyleSheet("color: black");
480     ui->motor2->setStyleSheet("color: black");
481     ui->motor4->setStyleSheet("color: black");
482     ui->motor5->setStyleSheet("color: red");
483     ui->motor6->setStyleSheet("color: black");
484     ui->motor7->setStyleSheet("color: black");
485     ui->motor8->setStyleSheet("color: black");
486     ui->motor9->setStyleSheet("color: black");
487     ui->motor10->setStyleSheet("color: black");
488     ui->motor11->setStyleSheet("color: black");
489     ui->motor12->setStyleSheet("color: black");
490     ui->motor13->setStyleSheet("color: black");
491     ui->motor14->setStyleSheet("color: black");
492     ui->motor15->setStyleSheet("color: black");}
493 }
494 
495 void MainWindow::on_motor6_clicked()
496 {if(my_class->g_flag==1){
497     //my_class->g_motor = 6;
498     my_class->g_data[3] =6;
499     ui->motor3->setStyleSheet("color: black");
500     ui->motor1->setStyleSheet("color: black");
501     ui->motor2->setStyleSheet("color: black");
502     ui->motor4->setStyleSheet("color: black");
503     ui->motor5->setStyleSheet("color: black");
504     ui->motor6->setStyleSheet("color: red");
505     ui->motor7->setStyleSheet("color: black");
506     ui->motor8->setStyleSheet("color: black");
507     ui->motor9->setStyleSheet("color: black");
508     ui->motor10->setStyleSheet("color: black");
509     ui->motor11->setStyleSheet("color: black");
510     ui->motor12->setStyleSheet("color: black");
511     ui->motor13->setStyleSheet("color: black");
512     ui->motor14->setStyleSheet("color: black");
513     ui->motor15->setStyleSheet("color: black");}
514 }
515 
516 void MainWindow::on_motor7_clicked()
517 {if(my_class->g_flag==1){
518     //my_class->g_motor = 7;
519     my_class->g_data[3] =7;
520     ui->motor3->setStyleSheet("color: black");
521     ui->motor1->setStyleSheet("color: black");
522     ui->motor2->setStyleSheet("color: black");
523     ui->motor4->setStyleSheet("color: black");
524     ui->motor5->setStyleSheet("color: black");
525     ui->motor6->setStyleSheet("color: black");
526     ui->motor7->setStyleSheet("color: red");
527     ui->motor8->setStyleSheet("color: black");
528     ui->motor9->setStyleSheet("color: black");
529     ui->motor10->setStyleSheet("color: black");
530     ui->motor11->setStyleSheet("color: black");
531     ui->motor12->setStyleSheet("color: black");
532     ui->motor13->setStyleSheet("color: black");
533     ui->motor14->setStyleSheet("color: black");
534     ui->motor15->setStyleSheet("color: black");}
535 }
536 
537 void MainWindow::on_motor8_clicked()
538 {if(my_class->g_flag==1){
539     //my_class->g_motor = 8;
540     my_class->g_data[3] =8;
541     ui->motor3->setStyleSheet("color: black");
542     ui->motor1->setStyleSheet("color: black");
543     ui->motor2->setStyleSheet("color: black");
544     ui->motor4->setStyleSheet("color: black");
545     ui->motor5->setStyleSheet("color: black");
546     ui->motor6->setStyleSheet("color: black");
547     ui->motor7->setStyleSheet("color: black");
548     ui->motor8->setStyleSheet("color: red");
549     ui->motor9->setStyleSheet("color: black");
550     ui->motor10->setStyleSheet("color: black");
551     ui->motor11->setStyleSheet("color: black");
552     ui->motor12->setStyleSheet("color: black");
553     ui->motor13->setStyleSheet("color: black");
554     ui->motor14->setStyleSheet("color: black");
555     ui->motor15->setStyleSheet("color: black");}
556 }
557 
558 void MainWindow::on_motor9_clicked()
559 {if(my_class->g_flag==1){
560     //my_class->g_motor = 9;
561     my_class->g_data[3] =9;
562     ui->motor3->setStyleSheet("color: black");
563     ui->motor1->setStyleSheet("color: black");
564     ui->motor2->setStyleSheet("color: black");
565     ui->motor4->setStyleSheet("color: black");
566     ui->motor5->setStyleSheet("color: black");
567     ui->motor6->setStyleSheet("color: black");
568     ui->motor7->setStyleSheet("color: black");
569     ui->motor8->setStyleSheet("color: black");
570     ui->motor9->setStyleSheet("color: red");
571     ui->motor10->setStyleSheet("color: black");
572     ui->motor11->setStyleSheet("color: black");
573     ui->motor12->setStyleSheet("color: black");
574     ui->motor13->setStyleSheet("color: black");
575     ui->motor14->setStyleSheet("color: black");
576     ui->motor15->setStyleSheet("color: black");}
577 }
578 
579 void MainWindow::on_motor10_clicked()
580 {if(my_class->g_flag==1){
581     //my_class->g_motor = 10;
582     my_class->g_data[3] =10;
583     ui->motor3->setStyleSheet("color: black");
584     ui->motor1->setStyleSheet("color: black");
585     ui->motor2->setStyleSheet("color: black");
586     ui->motor4->setStyleSheet("color: black");
587     ui->motor5->setStyleSheet("color: black");
588     ui->motor6->setStyleSheet("color: black");
589     ui->motor7->setStyleSheet("color: black");
590     ui->motor8->setStyleSheet("color: black");
591     ui->motor9->setStyleSheet("color: black");
592     ui->motor10->setStyleSheet("color: red");
593     ui->motor11->setStyleSheet("color: black");
594     ui->motor12->setStyleSheet("color: black");
595     ui->motor13->setStyleSheet("color: black");
596     ui->motor14->setStyleSheet("color: black");
597     ui->motor15->setStyleSheet("color: black");}
598 }
599 
600 void MainWindow::on_motor11_clicked()
601 {if(my_class->g_flag==1){
602     //my_class->g_motor = 11;
603     my_class->g_data[3] =11;
604     ui->motor3->setStyleSheet("color: black");
605     ui->motor1->setStyleSheet("color: black");
606     ui->motor2->setStyleSheet("color: black");
607     ui->motor4->setStyleSheet("color: black");
608     ui->motor5->setStyleSheet("color: black");
609     ui->motor6->setStyleSheet("color: black");
610     ui->motor7->setStyleSheet("color: black");
611     ui->motor8->setStyleSheet("color: black");
612     ui->motor9->setStyleSheet("color: black");
613     ui->motor10->setStyleSheet("color: black");
614     ui->motor11->setStyleSheet("color: red");
615     ui->motor12->setStyleSheet("color: black");
616     ui->motor13->setStyleSheet("color: black");
617     ui->motor14->setStyleSheet("color: black");
618     ui->motor15->setStyleSheet("color: black");}
619 }
620 
621 void MainWindow::on_motor12_clicked()
622 {if(my_class->g_flag==1){
623     //my_class->g_motor = 12;
624     my_class->g_data[3] =12;
625     ui->motor3->setStyleSheet("color: black");
626     ui->motor1->setStyleSheet("color: black");
627     ui->motor2->setStyleSheet("color: black");
628     ui->motor4->setStyleSheet("color: black");
629     ui->motor5->setStyleSheet("color: black");
630     ui->motor6->setStyleSheet("color: black");
631     ui->motor7->setStyleSheet("color: black");
632     ui->motor8->setStyleSheet("color: black");
633     ui->motor9->setStyleSheet("color: black");
634     ui->motor10->setStyleSheet("color: black");
635     ui->motor11->setStyleSheet("color: black");
636     ui->motor12->setStyleSheet("color: red");
637     ui->motor13->setStyleSheet("color: black");
638     ui->motor14->setStyleSheet("color: black");
639     ui->motor15->setStyleSheet("color: black");}
640 }
641 
642 void MainWindow::on_motor13_clicked()
643 {if(my_class->g_flag==1){
644     //my_class->g_motor = 13;
645     my_class->g_data[3] =13;
646     ui->motor3->setStyleSheet("color: black");
647     ui->motor1->setStyleSheet("color: black");
648     ui->motor2->setStyleSheet("color: black");
649     ui->motor4->setStyleSheet("color: black");
650     ui->motor5->setStyleSheet("color: black");
651     ui->motor6->setStyleSheet("color: black");
652     ui->motor7->setStyleSheet("color: black");
653     ui->motor8->setStyleSheet("color: black");
654     ui->motor9->setStyleSheet("color: black");
655     ui->motor10->setStyleSheet("color: black");
656     ui->motor11->setStyleSheet("color: black");
657     ui->motor12->setStyleSheet("color: black");
658     ui->motor13->setStyleSheet("color: red");
659     ui->motor14->setStyleSheet("color: black");
660     ui->motor15->setStyleSheet("color: black");}
661 }
662 
663 void MainWindow::on_motor14_clicked()
664 {if(my_class->g_flag==1){
665     //my_class->g_motor = 14;
666     my_class->g_data[3] =14;
667     ui->motor3->setStyleSheet("color: black");
668     ui->motor1->setStyleSheet("color: black");
669     ui->motor2->setStyleSheet("color: black");
670     ui->motor4->setStyleSheet("color: black");
671     ui->motor5->setStyleSheet("color: black");
672     ui->motor6->setStyleSheet("color: black");
673     ui->motor7->setStyleSheet("color: black");
674     ui->motor8->setStyleSheet("color: black");
675     ui->motor9->setStyleSheet("color: black");
676     ui->motor10->setStyleSheet("color: black");
677     ui->motor11->setStyleSheet("color: black");
678     ui->motor12->setStyleSheet("color: black");
679     ui->motor13->setStyleSheet("color: black");
680     ui->motor14->setStyleSheet("color: red");
681     ui->motor15->setStyleSheet("color: black");}
682 }
683 
684 void MainWindow::on_motor15_clicked()
685 {if(my_class->g_flag==1){
686     //my_class->g_motor = 15;
687     my_class->g_data[3] =15;
688     ui->motor3->setStyleSheet("color: black");
689     ui->motor1->setStyleSheet("color: black");
690     ui->motor2->setStyleSheet("color: black");
691     ui->motor4->setStyleSheet("color: black");
692     ui->motor5->setStyleSheet("color: black");
693     ui->motor6->setStyleSheet("color: black");
694     ui->motor7->setStyleSheet("color: black");
695     ui->motor8->setStyleSheet("color: black");
696     ui->motor9->setStyleSheet("color: black");
697     ui->motor10->setStyleSheet("color: black");
698     ui->motor11->setStyleSheet("color: black");
699     ui->motor12->setStyleSheet("color: black");
700     ui->motor13->setStyleSheet("color: black");
701     ui->motor14->setStyleSheet("color: black");
702     ui->motor15->setStyleSheet("color: red");}
703 }
704 
705 void MainWindow::on_pushButton_3_clicked()
706 {
707     my_class->g_roll = 1;//正转
708     if(my_class->g_flag==1){
709     ui->pushButton_3->setStyleSheet("color: red");
710     ui->pushButton_4->setStyleSheet("color: black");}
711 }
712 
713 void MainWindow::on_pushButton_4_clicked()
714 {
715     my_class->g_roll = 2;//反转
716     if(my_class->g_flag==1){
717     ui->pushButton_3->setStyleSheet("color: black");
718     ui->pushButton_4->setStyleSheet("color: red");}
719 }
720 
721 void MainWindow::on_pushButton_2_clicked()
722 {
723     //板子编号取值
724     bool flag = true;
725     if(my_class->g_data[3]>8)
726     {
727         flag =true;
728         my_class->g_data[2] =2;
729         my_class->g_data[3]-=8;
730     }
731     else
732     {
733         flag = false;
734         my_class->g_data[2] = 1;
735     }//电机号和正反转取值
736     my_class->g_data[3] =my_class->g_data[3]*16 + my_class->g_roll;
737     //校验位取值
738     int num1;
739     num1 = my_class->g_data[3]+my_class->g_data[4]+my_class->g_data[5];
740     my_class->g_data[6] = num1 % 256;
741     my_class->g_data[3] = (my_class->g_data[3]-my_class->g_roll)/16;
742     if(flag)    my_class->g_data[3]+=8;
743     int temp3 = my_class->g_data[3];
744     int temp6 = my_class->g_data[6];
745 
746     my_class->g_data[3] =255;
747     //校验位取值
748     int num;
749     num = my_class->g_data[3]+my_class->g_data[4]+my_class->g_data[5];
750     my_class->g_data[6] = num % 256;
751     //------------十进制转化成QString然后再转化成长十六进制发送------//
752     qDebug()<<"number:";
753     QString a1;
754     for(int j=0;j<7;j++)
755     {
756         if(my_class->g_data[j]<16)
757         a1+='0'+QString::number(my_class->g_data[j], 16).toUpper();
758         else a1+=QString::number(my_class->g_data[j], 16).toUpper();
759     }
760     qDebug()<<a1;
761     //QByteArray data;
762     //data.append(a1);
763     //tcpSocket->write(data);
764     tcpSocket->write(QString2Hex(a1));
765 
766 
767     ui->pushButton_2->setEnabled(false);
768     ui->pushButton->setEnabled(true);
769     ui->speedSlider->setEnabled(true);
770     ui->timeSlider->setEnabled(true);
771 
772     my_class->g_data[3] = temp3;
773     my_class->g_data[6] = temp6;
774     my_class->g_flag = 1;
775 }
MainWindow.cpp
 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QTcpServer>
 6 #include <QTcpSocket>
 7 #include <QMessageBox>
 8 #include <QCheckBox>
 9 #include "wjy_class.h"
10 #include <QDebug>
11 
12 namespace Ui {
13 class MainWindow;
14 }
15 
16 class MainWindow : public QMainWindow
17 {
18     Q_OBJECT
19     friend class wjy_class;
20 public:
21     wjy_class *my_class = new wjy_class;
22     explicit MainWindow(QWidget *parent = 0);
23     ~MainWindow();
24 private slots:
25    void sendMassage();
26    void readMassage();
27    void displayError(QAbstractSocket::SocketError);
28    void connectUpdata();
29    void disconnectUpdata();
30    void on_sendButton_clicked();
31    void on_clearButton_clicked();
32    void on_connnectButton_clicked();
33    void on_disconnectButton_clicked();  
34    void on_speedSlider_valueChanged(int value);
35    void on_timeSlider_valueChanged(int value);
36    QByteArray QString2Hex(QString str);
37    int ConvertHexChar(char ch);
38 
39    void on_motor1_clicked();
40    void on_motor2_clicked();
41    void on_motor3_clicked();
42    void on_pushButton_clicked();
43 
44    void on_motor4_clicked();
45 
46    void on_motor5_clicked();
47 
48    void on_motor6_clicked();
49 
50    void on_motor7_clicked();
51 
52    void on_motor8_clicked();
53 
54    void on_motor9_clicked();
55 
56    void on_motor10_clicked();
57 
58    void on_motor11_clicked();
59 
60    void on_motor12_clicked();
61 
62    void on_motor13_clicked();
63 
64    void on_motor14_clicked();
65 
66    void on_motor15_clicked();
67 
68    void on_pushButton_3_clicked();
69 
70    void on_pushButton_4_clicked();
71 
72    void on_pushButton_2_clicked();
73 
74 private:
75    //QTcpServer *tcpServer;//不用再建立服务器类了,直接建立下面的套接字
76    QTcpSocket *tcpSocket;//直接建立TCP套接字类
77    QString tcpIp;//存储IP地址
78    QString tcpPort;//存储端口地址
79    bool flag;
80    Ui::MainWindow *ui;
81 
82 };
83 
84 
85 #endif // MAINWINDOW_H
MainWindow.h
1 #include "wjy_class.h"
2 
3 wjy_class::wjy_class():g_data{0,0,0,0,0,0,0,0,0,0},g_roll(1),g_flag(1)
4 {
5 }
wjy_class.cpp
 1 #ifndef WJY_CLASS_H
 2 #define WJY_CLASS_H
 3 //#include <vector>
 4 
 5 using namespace std;
 6 class wjy_class
 7 {
 8 public:
 9     wjy_class();
10     //vector<int> g_motor;//预留多路电机同时控制
11     /*int g_motor;
12     int g_speed;
13     int g_time;*/
14     int g_roll;
15     long int g_data[10];
16     bool g_flag;
17 };
18 
19 #endif // WJY_CLASS_H
wjy_class.h
 1 #include "mainwindow.h"
 2 #include <QApplication>
 3 #include "logindialog.h"
 4 #include "wjy_class.cpp"
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     QApplication a(argc, argv);
 9     MainWindow w;
10     LoginDialog login;
11     if(login.exec() ==QDialog::Accepted)
12     {
13         w.show();
14         return a.exec();
15     }
16     else return 0;
17 
18 }
main.cpp

 源程序都在上面了,直接看懂复制就行了,如果有不对的地方,麻烦大家指正!

 

posted on 2017-02-23 19:15  影醉阏轩窗  阅读(12650)  评论(22编辑  收藏  举报

导航

/* 线条鼠标集合 */ /* 鼠标点击求赞文字特效 */ //带头像评论