之前用Qt写一个用于Arduino开发板HEX文件烧写的工具,遇到了这个问题。后来找到了一个跨平台的串口操作库:qextserialport
以下代码可用于获取Windows平台上活动的串口列表。

QStringList & ComPortMgr::getAvailableComPorts()
{
    static QStringList availablePorts;
    const int MAX_COM_PORT = 256;
    QString testPortName;
    QextSerialPort testPort;    testPort.setBaudRate(BAUD9600);    testPort.setFlowControl(FLOW_OFF);    testPort.setParity(PAR_NONE);    testPort.setDataBits(DATA_8);    testPort.setStopBits(STOP_1);    for (int i = 1; i < MAX_COM_PORT; i++) {        testPortName = QString("COM%1").arg(i);        testPort.setPortName(testPortName);        if (testPort.open(QIODevice::ReadWrite)) {
            availablePorts.append(testPortName);            testPort.close();
        }
    }    return availablePorts;