Qt串口通讯

     一段时间以来,Qt的串口通讯一直是一个亟待解决的问题。上网调研了一段时间后,有了以下发现:

     1.在早期的Qt版本中,主要是采用第三方类作为Qt对串口通讯的支持,具体可参考http://blog.csdn.net/yafeilinux/article/details/4717706

     2.在进入Qt5的时代后,串口通讯已经作为Qt的一个附件部分,但没有作为Qt的正式模块。使用这样的串口模块时,需要自行编译串口部分,具体可参考:http://blog.csdn.net/chenlong12580/article/details/8976176

     鉴于以上两种做法都比较复杂,本人一直没有调试串口通讯部分,直到最近才不得不重新审视这部分的工作。刚好在这段时间Qt5.1.0的稳定版本发布,在阅读新特性时才发现,串口模块已经正式成为了Qt的官方部分(参考:http://www.ics.com/blog/whats-new-qt-51-qtserialport#.Ue9zBocsnXAIt officially becomes part of Qt with the 5.1.0 release.)。于是我下载了最新的Qt版本Qt 5.1.0 for Windows 32-bit (VS 2010, OpenGL, 504 MB) ,安装完成后,发现果然在安装文件中多了QtSerialPort部分。同时我在VS2010中新建了一个Qt工程,用以测试Qt的串口通讯,只可惜在添加Qt的模块时,并没有找到SerialPort,这就必须在建立工程后手动添加了,比较麻烦!

     最后附上一个测试程序,参考网页:http://www.ics.com/blog/whats-new-qt-51-qtserialport#.Ue9zBocsnXA

#include <QCoreApplication>
#include <QDebug>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << "Number of serial ports:" << QSerialPortInfo::availablePorts().count();

    foreach (const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()) {

        qDebug() << "
Port:" << serialPortInfo.portName();
        qDebug() << "Location:" << serialPortInfo.systemLocation();
        qDebug() << "Description:" << serialPortInfo.description();
        qDebug() << "Manufacturer:" << serialPortInfo.manufacturer();
        qDebug() << "Vendor Identifier:" << (serialPortInfo.hasVendorIdentifier() ? QByteArray::number(serialPortInfo.vendorIdentifier(), 16) : QByteArray());
        qDebug() << "Product Identifier:" << (serialPortInfo.hasProductIdentifier() ? QByteArray::number(serialPortInfo.productIdentifier(), 16) : QByteArray());
        qDebug() << "Busy:" << (serialPortInfo.isBusy() ? QObject::tr("Yes") : QObject::tr("No"));

        QSerialPort *port = new QSerialPort(serialPortInfo);
        if (port->open(QIODevice::ReadWrite)) {
            qDebug() << "Baud rate:" << port->baudRate();
            qDebug() << "Data bits:" << port->dataBits();
            qDebug() << "Stop bits:" << port->stopBits();
            qDebug() << "Parity:" << port->parity();
            qDebug() << "Flow control:" << port->flowControl();
            qDebug() << "Read buffer size:" << port->readBufferSize();
            port->close();
        } else {
            qDebug() << "Unable to open port, error code" << port->error();
        }
        delete port;
    }

    return 0;
}
View Code
原文地址:https://www.cnblogs.com/ppffs/p/3210778.html