首页 > 代码库 > Qt 自动搜索串口号列表

Qt 自动搜索串口号列表

@功能:
SerialPortList 类实现当前可用的串口进行实时扫描,当发现有新的串口
或是现有串口消失时,SerialPortList类将发出一个QStringList类型的
信号onNewSerialPort,QStringList类型对象中存放当前可用的串口设备。

@使用方法:
1、Qt版本需要高于5.1以上;

2、在新建Qt工程文件中时需要加入QSerialPort模块;即:在xxx.pro文件
   中加入 Qt += serialport

3、在应用程序中定义一个曹,用于响应SerialPortList信号,获取串口列表
   void onNewPortList(QStringList portName){
    ui->comboBoxComList->clear();
    ui->comboBoxComList->addItems(portName);
   }

4、在应用程序中构建SerialProt对象,连接onNewSerialPort信号:
  portList = new SerialPortList(200);
  connect(portList, SIGNAL(onNewSerialPort(QStringList)),\
          this,     SLOT(onNewPortList(QStringList)));

5、开启扫描
  portList->ScanStart();

 

 

serialPortList.h

#ifndef SERIALPORTLIST_H#define SERIALPORTLIST_H#include <QTimer>#include <QDebug>#include <QSerialPort>#include <QStringList>#include <QSerialPortInfo>/* @交流: * worldsing.cnblogs.com * * @功能: * SerialPortList 类实现当前可用的串口进行实时扫描,当发现有新的串口 * 或是现有串口消失时,SerialPortList类将发出一个QStringList类型的 * 信号onNewSerialPort,QStringList类型对象中存放当前可用的串口设备。 * * @使用方法: * 1、Qt版本需要高于5.1以上; * * 2、在新建Qt工程文件中时需要加入QSerialPort模块;即:在xxx.pro文件 *    中加入 Qt += serialport * * 3、在应用程序中定义一个曹,用于响应SerialPortList信号,获取串口列表 *    void onNewPortList(QStringList portName){ *     ui->comboBoxComList->clear(); *     ui->comboBoxComList->addItems(portName); *    } * * 4、在应用程序中构建SerialProt对象,连接onNewSerialPort信号: *   portList = new SerialPortList(200); *   connect(portList, SIGNAL(onNewSerialPort(QStringList)), *           this,     SLOT(onNewPortList(QStringList))); * * 5、开启扫描 *   portList->ScanStart(); */#define  DEBUG_INFOR_EN   0class SerialPortList : public QObject{    Q_OBJECTpublic:    SerialPortList();    SerialPortList(quint16);    ~SerialPortList();    quint16 scanCycleMs;    QTimer *timer;    QStringList oldPortStringList;    void ScanStart();    void ScanStop();public slots:    void onTimeOut();signals:    void onNewSerialPort(QStringList);};#endif // SERIALPORTLIST_H

 

serialPortList.cpp

#include "serialportlist.h"//默认构造SerialPortList::SerialPortList(){    timer = new QTimer;    scanCycleMs = 200;    oldPortStringList.clear();    connect(timer, SIGNAL(timeout()), this, SLOT(onTimeOut()));}//自定义扫描周期构造SerialPortList::SerialPortList(quint16 CycleMs){    timer = new QTimer;    scanCycleMs = CycleMs;    oldPortStringList.clear();    connect(timer, SIGNAL(timeout()), this, SLOT(onTimeOut()));}SerialPortList::~SerialPortList(){    delete timer;}//开始扫描void SerialPortList::ScanStart(){    timer->stop();    timer->start(scanCycleMs);}//停止扫描void SerialPortList::ScanStop(){    timer->stop();}//周期扫描服务void SerialPortList::onTimeOut(){    QStringList newPortStringList;    //搜索串口    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){      #if DEBUG_INFOR_EN        qDebug() << "Name        : " << info.portName();        qDebug() << "Description : " << info.description();        qDebug() << "Manufacturer: " << info.manufacturer();      #endif      newPortStringList += info.portName();    }    //更新旧的串口列表    if(newPortStringList.size() != oldPortStringList.size())    {        oldPortStringList = newPortStringList;        emit onNewSerialPort(oldPortStringList);    }}

Qt 自动搜索串口号列表