QT4裏不像Qt5自帶串口擴展那麼方便,但是嵌入式開發或者想支持很舊的Linux操作系統時就需要Qt4,畢竟Qt4輕量級啊。
引入qextserialport擴展的方法比引入QJson擴展方便多了,從:https://github.com/qextserialport/qextserialport可以下載到最新源碼,可以支持Linux下也支持異步信號的方式,即QextSerialPort::EventDriven。
下載後,解壓縮,目錄src更名爲qextserialport,然後拷貝到項目中。修改項目文件增加一句include(qextserialport/qextserialport.pri)就可以使用了。
用法示例:
#include "qextserialport.h"
...
QextSerialPort *port = new QextSerialPort();
connect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
connect(port, SIGNAL(bytesWritten(qint64)), this, SLOT(onBytesWritten(qint64)));
connect(port, SIGNAL(dsrChanged(bool)), this, SLOT(onDsrChanged(bool)));
...
port->setPortName(name);
port->setBaudRate(port_baudrate);
port->setFlowControl(FLOW_OFF);
port->setParity(party_type);
port->setDataBits(port_start_bit);
port->setStopBits(port_stop_bit);
if (!port->open(QIODevice::ReadWrite)) {
qDebug() << "串口打開失敗:" << errorString();
return false;
} else {
if (!(lineStatus() & LS_DSR)) {
qDebug() << "警告: 設備尚未準備好,請稍後再寫入數據";
} else {
qDebug() << "開始監聽串口:" << portName();
}
return true;
}
...
QString data = "hello";
write(data.toStdString().c_str(), data.size());
QByteArray buf;
buf.append(data);
port->write(buf);