关于QSerialPort的使用说明(Qt实现串口工具)
生活随笔
收集整理的這篇文章主要介紹了
关于QSerialPort的使用说明(Qt实现串口工具)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Qt提供了對串口設備的簡單操作功能接口,包括串口配置、收/發數據。將串口設備插入到電腦USB接口后,可在電腦的設備管理里查看端口,會多了個COM之類的端口。一般的USB串行設備驅動在window里都已經安裝好了,不需要再單獨安裝驅動,若是設備管理器查看到端口出現了嘆號,可以從網上查找對應的驅動,并下載安裝。
1.在使用QSerialPort類的文件里,需要包含以下頭文件
#include <QtSerialPort/QtSerialPort> #include <QtSerialPort/QSerialPortInfo>2.在.pro文件里添加
QT += serialport3.獲取/查看電腦里所有的串口設備?
QList<QSerialPortInfo> list;list = QSerialPortInfo::availablePorts();for (int i = 0; i < list.size(); i++){qDebug() << list.at(i).portName() ;//串口名字qDebug() << list.at(i).description();//串口描述qDebug() << "#########";}執行后輸出:
可看當前我電腦有COM1/COM3/COM4,三個串口設備。?
?4.打開和配置串口設備
QSerialPort *port;port = new QSerialPort("COM4");//通過名字打開,可通過上面的list里查找/*根據需求對串口進行進行配置*/port->setBaudRate(QSerialPort::Baud115200);//配置波特率位115200port->setDataBits(QSerialPort::Data8);//配置數據格式為8bitport->setParity(QSerialPort::NoParity);//無校驗位port->setStopBits(QSerialPort::OneStop);//一個停止位port->setFlowControl(QSerialPort::NoFlowControl);//不使用流控制/*打開設備*/if (!port->open(QIODevice::ReadWrite)){qDebug() << "serial open failed";return ;}else{qDebug() << "serial open success";}/*設置接收緩沖區大小*/port->setReadBufferSize(500);/*綁定接受槽函數,但收到信息是將調用MainSerialRecvMsgEvent函數*/QObject::connect(port, &QSerialPort::readyRead, this, &MainWindow::MainSerialRecvMsgEvent);?如果打開串口失敗,可能是因為該串口已經被其他進程占用,綁定槽函數之后,當串口有數據的時候就會回調該槽函數,值得注意的是,假如要接收連串的10個字節的數據,可能進入多次槽函數,每一次接收部分字節;也有可能進入一次槽函數就已接收完10個字節。
5.接收、發送串口數據
/*數據接收*/ void MainWindow::MainSerialRecvMsgEvent(void) {QByteArray MainSerialRecvData;//保存串口數據的數組if(port->bytesAvailable()>0)//判斷等到讀取的數據大小{MainSerialRecvData = port->readAll();//讀取所有的接收數據if(!MainSerialRecvData.isEmpty()){qDebug() <<MainSerialRecvData.size();//打印數據大小for(int i = 0; i < MainSerialRecvData.size();i++){qDebug() <<MainSerialRecvData.at(i);}ui->textBrowser->append(MainSerialRecvData);//將數據顯示到textBrowser}else{qDebug()<<"接受數據出錯";}} }/*數據發送*/ void MainWindow::on_pushButton_2_clicked() {QByteArray txdata;if(port!=NULL&&port->isOpen()){txdata = ui->lineEdit->text().toLatin1();port->write(txdata);ui->lineEdit->clear();}else{qDebug() <<"串口未打開!";} }調用write發送數據是將數據寫入了內部發送數據緩沖區,并不等于馬上從底層串行端口發出,真正發出去的時間受電腦當前性能的影響。這一點在我們一般的使用過程中不會受到太大影響。使用flush()可盡可能的將發送緩沖區的數據從端口發出,在大多數的情況下,不需要使用它。
附上一個簡單的例程:點擊下載。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的关于QSerialPort的使用说明(Qt实现串口工具)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现中国象棋(Qt实现界面,源码下
- 下一篇: 关于QSqlTableModel的使用说