前言
使用串口通信时,需要获取设备可用的串口名称,并放到UI界面组合框清单内,以供使用串口时选择。
学习后,整理了两种可行的方法。
方法一
头文件
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
前提
static const char blankString[] = QT_TRANSLATE_NOOP("SettingsDialog", "N/A");
QString description;
QString manufacturer;
QString serialNumber;
获取可用串口
QList<QSerialPortInfo> serialPortInfos = QSerialPortInfo::availablePorts();
将所有可以使用的串口设备添加到ComboBox
for (const QSerialPortInfo &serialPortInfo : serialPortInfos)
{
QStringList list;
description = serialPortInfo.description();
manufacturer = serialPortInfo.manufacturer();
serialNumber = serialPortInfo.serialNumber();
qDebug() <<"serialPortInfo.portName"<<serialPortInfo.portName();
list << serialPortInfo.portName()
<< (!description.isEmpty() ? description : blankString)
<< (!manufacturer.isEmpty() ? manufacturer : blankString)
<< (!serialNumber.isEmpty() ? serialNumber : blankString)
<< serialPortInfo.systemLocation()
<< (serialPortInfo.vendorIdentifier() ? QString::number(serialPortInfo.vendorIdentifier(), 16) : blankString)
<< (serialPortInfo.productIdentifier() ? QString::number(serialPortInfo.productIdentifier(), 16) : blankString);
//获取端口号清单放在端口号列表
ui->comboBox_serialPort->addItem(list.first(), list);
匹配端口号
ui->comboBox_serialPort->addItem(tr("custom"));
方法二
头文件
#include <QStandardItemModel> #include <QtSerialPort/QSerialPortInfo>
获取串口名称项目,并添加到组合框
const auto infos = QSerialPortInfo::availablePorts(); //infos = 可用的串口清单 const auto
QStandardItemModel *model = new QStandardItemModel();// 构建一个有行列和父类的项目模型
for (const QSerialPortInfo &info : infos) { //遍历串口信息
if(!info.isBusy()) //如果信息是没被占用
{
QStandardItem *item = new QStandardItem(info.portName());//构造项目获取串口号名字
item->setToolTip(info.description());//给项目设置工具提示:串行端口的描述字符串
model->appendRow(item);//项目模型追加项目串口号名字行
}
}
ui->comboBox_serialPort_dianji_01->setModel(model);//界面串口号显示项目串口号名字