QT下拉选择窗口(ComboBox)显示串口号
需要用到QSerialPortInfo这个类来实现。
这个类不仅能获取端口号,还能获取厂商信息,系统定位等信息
参考QT自带的Terminal例子
打开Terminal中的settingsdailog,cpp,有fillPortsInfo用来显示可用串口号
void SettingsDialog::fillPortsInfo()
{
m_ui->serialPortInfoListBox->clear();
QString description;
QString manufacturer;
QString serialNumber;
const auto infos = QSerialPortInfo::availablePorts(); //auto自动获取变量范围
for (const QSerialPortInfo &info : infos) { //基于范围的for循环(用于循环的变量:遍历范围)
QStringList list; //QSerialPortInfo返回的是QStringList类型变量?
description = info.description();
manufacturer = info.manufacturer();
serialNumber = info.serialNumber();
list << info.portName() //QStringList类型操作
<< (!description.isEmpty() ? description : blankString)
<< (!manufacturer.isEmpty() ? manufacturer : blankString)
<< (!serialNumber.isEmpty() ? serialNumber : blankString)
<< info.systemLocation()
<< (info.vendorIdentifier() ? QString::number(info.vendorIdentifier(), 16) : blankString)
<< (info.productIdentifier() ? QString::number(info.productIdentifier(), 16) : blankString);
m_ui->serialPortInfoListBox->addItem(list.at(0), list); //显示可用串口
}
m_ui->serialPortInfoListBox->addItem(tr("Custom"));
}'
照葫芦画瓢去掉信息判断、Custom选项即可,需要注意的是这里没有使用信号槽机制,把函数放到主循环就可以实现功能
/**
* @func: 扫描可用COM口
* @breif: 把可用串口好添加到对应ComBox中
* @specific:
* 1.解析串口信息进行跟新,更新不采用信号槽触发方式,而是在main_thread中轮询执行
*/
void MainWindow::SerialCOMScan()
{
ui->comboBoxCOM->clear();
const auto COMinfos = QSerialPortInfo::availablePorts(); //用auto自动获取变量类型
for(const QSerialPortInfo &COMInfo : COMinfos) //cpp11范围遍历
{
QStringList COMInfo_Str_Analysis;
COMInfo_Str_Analysis << COMInfo.portName()
<< COMInfo.description()
<< COMInfo.manufacturer()
<< COMInfo.serialNumber()
<< COMInfo.systemLocation();
//<< COMInfo.availablePorts(); ***这个不是QStringlist类型
ui->comboBoxCOM->addItem(COMInfo_Str_Analysis.at(0),COMInfo_Str_Analysis); //添加可用端口号,把包含串口字符信息的list传过去
}
}
添加之后就可以在下拉窗口显示可用端口