開發環境 Qt5.5.1、Qt Creator 3.5.1
1、創建項目 ( QtSerialDemo )
2、添加組件——修改 “項目名.pro” ( QtSerialDemo.pro ) ,添加
QT += serialport
3、添加如下使用 “Qt串口” 所需的頭文件
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
4、主要串口通訊方法
(1)枚舉與當前設備連接的所有串口,如果發現是所需要的串口 ( COM4 ),則將串口接收數據的信號與自定義的槽函數readyReadSlot()進行綁定,在槽函數readyReadSlot()中處理接收到的數據。
bool QtDemoWindow::initSerial()
{
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
qDebug() << "Name : " << info.portName();
qDebug() << "Description : " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
qDebug() << "serialNumber" << info.serialNumber();
serial.setPort(info);
int result = QString::localeAwareCompare(info.portName(), "COM4");
qDebug()<<"result = "<<result;
if(result == 0) {
if(serial.open(QIODevice::ReadWrite)) {
qDebug()<<"serial open";
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setStopBits(QSerialPort::OneStop);
serial.setParity(QSerialPort::OddParity);
serial.setFlowControl(QSerialPort::SoftwareControl);
serial.clearError();
serial.clear();
connect(&serial, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
return true;
}
}
}
return false;
}(2)處理收到的數據,這裏只是簡單打印收到的數據,需要替換爲實際處理方法。
void QtDemoWindow::readyReadSlot()
{
QByteArray arr = serial.readAll();
qDebug()<<arr;
}(3)發送數據
void QtDemoWindow::serialSendData()
{
if(serial.isOpen()) {
if(serial.isDataTerminalReady()) {
serial.write("isDataTerminalReady true");
} else {
qDebug()<<"DataTerminal not Ready";
}
} else {
qDebug()<<"serial not open";
}
}
注意:註釋中,括號內的爲值爲本人環境下所測試的值,在使用時需要按照實際環境進行修改。