Qt5 SerialPort下面代码的关键两个地方

 Qt5 SerialPort下面代码的关键两个地方,就是读和写两个位置,因为串口是不稳定的,所以必须以这种方式来收发。

[cpp] view plain copy Qt5 SerialPort下面代码的关键两个地方Qt5 SerialPort下面代码的关键两个地方

  1. #include "stdafx.h"  

  2. #include "serialporttesttool.h"  

  3.   

  4. SerialPortTestTool::SerialPortTestTool(QWidget *parent)  

  5.     : QMainWindow(parent)  

  6. {  

  7.     ui.setupUi(this);  

  8.     sp = new QSerialPort("com4",this);  

  9.     if (sp->open(QIODevice::ReadWrite))  

  10.     {  

  11.         sp->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);  

  12.         sp->setDataBits(QSerialPort::Data8);  

  13.         sp->setStopBits(QSerialPort::OneStop);  

  14.         sp->setParity(QSerialPort::NoParity);  

  15.         sp->setFlowControl(QSerialPort::NoFlowControl);  

  16.         //connect(sp,SIGNAL(readyRead()),this,SLOT(serialRead()));  

  17.     }  

  18. }  

  19.   

  20. SerialPortTestTool::~SerialPortTestTool()  

  21. {  

  22.     sp->close();  

  23.     delete sp;  

  24. }  

  25.   

  26. void SerialPortTestTool::on_lineEdit_returnPressed()  

  27. {  

  28.     QByteArray command = ui.lineEdit->text().trimmed().toLocal8Bit() + "\r\n";  

  29.     sp->write(command,command.length());  

  30.     ui.lineEdit->setText("");  

  31.     if (sp->waitForBytesWritten(2000))  

  32.     {  

  33.         ui.textEdit->append("ok");  

  34.     }  

  35.     else  

  36.     {  

  37.         ui.textEdit->append("failed");  

  38.     }  

  39. }  

  40. void SerialPortTestTool::serialRead()  

  41. {  

  42.     static QByteArray allData;  

  43.     QByteArray dataTemp;  

  44.     while (!sp->atEnd())  

  45.     {  

  46.         dataTemp = sp->readLine();  

  47.         ui.textEdit->append(QString::fromLatin1(dataTemp));  

  48.     }  

  49. }  

  50.   

  51. void SerialPortTestTool::on_pushButton_clicked()  

  52. {  

  53.     QByteArray temp = sp->readAll();  

  54.     while (sp->waitForReadyRead(10))  

  55.     {  

  56.         temp += sp->readAll();  

  57.     }  

  58.   

  59.     ui.textEdit->append(QString::fromLatin1(temp));  

  60.   

  61. }  

Qt5 SerialPort下面代码的关键两个地方