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 }
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
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 }
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
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 }
源程序都在上面了,直接看懂复制就行了,如果有不对的地方,麻烦大家指正!
作者:影醉阏轩窗
-------------------------------------------
个性签名:衣带渐宽终不悔,为伊消得人憔悴!
如果觉得这篇文章对你有小小的帮助的话,记得关注再下的公众号,同时在右下角点个“推荐”哦,博主在此感谢!