Qt获取当前串口的简易方法——QSerialPortInfo::availablePorts()

环境:

win10

Qt5.9.7 + msvc2017

 

因为之前需要用到串口通信,在网上查询了一些资料,基本都是通过查询注册表获取的方式,十分的复杂。

后来偶然发现Qt自带的QSerialPortInfo中自带了这样的接口,十分好用。

    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        ui->comboBox_PortName->addItem(serial.portName());
    }

上述代码是通过QSerialPortInfo的方法availablePorts() 返回一个QList,然后通过foreach遍历。

注意:因为QSerialPortInfo类在提供的是一个包含port name, system location, description, and manufacturer几种内容的,所以不能直接使用,我们通过SerialPort的setPort方法设置一下,转而获取QSerialPort的port Name(),就可以添加到我们的QComboBox中了。以上就是获取所有可获得的串口号的方法,但是有的时候我们会发现,获取到的串口不一定能用(被占用或其他情况),这时我们只要在上面代码中稍微处理一下就好。

    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        if(serial.open(QIODevice::ReadWrite))
        {
            ui->comboBox_PortName->addItem(serial.portName());
            serial.close();
        }
    }

这里相当于先尝试串口是否能打开,但是由于这个过程是需要时间的,所以在界面上来看会有卡顿。

你可能感兴趣的:(QT5问题及解决方法)