QT之 串口USB热插拔事件

本文介绍如何使用QT实现串口的自动连接与热插拔监测功能。通过监测USB设备的插入和拔出实现串口的动态扫描与连接。文章提供了具体的代码实现示例。

一、需求

扫描电脑可用串口并连接进行通信,该设备一般是一直插在电脑上的,由于电脑可用串口不一定只有一个也不一定就是对应的设备,所以需要在可用串口中筛选,另外还有一个随时插拔的串口设备需要连接通信。

二、实现

在usb插入插出实现串口的扫描并记录串口名字

先理解热插拔功能的库文件

//第一步监测
void MainWindow::MainWidgetUsbListen()
{
    port = new QSerialPort(this); //新建串口类
    Main_usb_listener = new usb_listener; //新建热插拔监听

    qApp->installNativeEventFilter(Main_usb_listener);
    connect(Main_usb_listener, &usb_listener::DevicePlugIn, [=](){

         SerialPortConnect();
         qDebug("SerialPortConnect");
    });

    Main_usb_listener->EmitMySignal();     //第一次不管有没有,即使串口插在上面,手动触发一次依旧可以检测
}

//第二步扫描串口并且连接
//初始化串口,热插拔串口检测
void MainWindow::SerialPortConnect()
{
    //列出当前系统中可用的串口
    QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
    if(infos.isEmpty())//没有可用的串口
    {
        QMessageBox::warning(this, "错误提示", "串口配置失败!!!");
        return;
    }
    else
    {
        //遍历容器中的所以元素
        foreach (QSerialPortInfo info, infos) {

            if(info.description() == "USB-SERIAL CH340")
              {
                qDebug()<<"当前串口的名称"<<info.portName()<<endl;
                port->setPortName(info.portName());
                port->setBaudRate(QSerialPort::Baud115200);
                port->setDataBits(QSerialPort::Data8);
                port->setStopBits(QSerialPort::OneStop);
                port->setParity(QSerialPort::NoParity);
                port->open(QIODevice::ReadWrite);
                TextSerConnect->setText("  串口运行 ");
                QMessageBox::warning(this, "正确提示", "串口配置成功!!!");
              }
			if。。。。。。。

        }
    }
}







 
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
        qDebug() << "Name        : " << info.portName();
        qDebug() << "Description : " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();
        qDebug() << "isBusy(): " << info.isBusy();
 
        ui->portComboBox->addItem(info.portName());
  

串口扫描可用检测字符串 参考

void MainWindow::MainWidgetUsbListen()
{
    port = new QSerialPort(this); //新建串口类
    Main_usb_listener = new usb_listener; //新建热插拔监听

    qApp->installNativeEventFilter(Main_usb_listener);
    connect(Main_usb_listener, &usb_listener::DevicePlugIn, [=](){

         SerialPortConnect();
         qDebug("SerialPortConnect");
    });

    Main_usb_listener->EmitMySignal();     //第一次不管有没有,即使串口插在上面,手动触发一次依旧可以检测
}




//初始化串口,热插拔串口检测
void MainWindow::SerialPortConnect()
{
    //列出当前系统中可用的串口
    QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
    if(infos.isEmpty())//没有可用的串口
    {
        QMessageBox::warning(this, "错误提示", "串口配置失败!!!");
        return;
    }
    else
    {
        //遍历容器中的所以元素
        foreach (QSerialPortInfo info, infos) {

            if(info.description() == "USB-SERIAL CH340")
              {
                qDebug()<<"当前串口的名称"<<info.portName()<<endl;
                port->setPortName(info.portName());
                port->setBaudRate(QSerialPort::Baud115200);
                port->setDataBits(QSerialPort::Data8);
                port->setStopBits(QSerialPort::OneStop);
                port->setParity(QSerialPort::NoParity);
                port->open(QIODevice::ReadWrite);
                TextSerConnect->setText("  串口运行 ");
                QMessageBox::warning(this, "正确提示", "串口配置成功!!!");
              }

        }
    }
}

参考

1、QT 实现串口程序及串口基础知识

2、QT多串口下自动连接及热插拔监测

3、【QT】监听USB热插拔事件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值