zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    TIM时钟频率计算
    时钟节拍tick
    Continue作用
    struct结构体的字节长度,字节对齐
    IAR所包含的头文件位置
    Oracle存储过程给变量赋值的方法
    DataTable如何去除重复的行
    C#遍历窗体所有控件或某类型所有控件
    SqlServer无备份下误删数据恢复
    45.4.7 序列:USER_SEQUENCES(SEQ)
  • 原文地址:https://www.cnblogs.com/ppffs/p/3210778.html
Copyright © 2011-2022 走看看