• 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

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

     

  • 相关阅读:
    data filter 去掉HTML文件中的所有标记
    data filter 去掉HTML文件中的所有标记
    C++ 上溢和下溢(overflow underflow)
    C++ 上溢和下溢(overflow underflow)
    按字节提取整形数值(按位与运算符“&”、右移位运算符“>>”)
    按字节提取整形数值(按位与运算符“&”、右移位运算符“>>”)
    二进制、十进制、N进制 ○| ̄|_
    二进制、十进制、N进制 ○| ̄|_
    JAVA合法标识符
    JAVA合法标识符
  • 原文地址:https://www.cnblogs.com/wjy-lulu/p/6435009.html
Copyright © 2020-2023  润新知