前言`
最近在用QT弄一个串口上位机,以前用QT做的串口工具在选择串口的时候只能通过串口号选择,在有多个串口设备的时候不是很方便,所以这次就想着搞成选择的时候可以显示串口设备名称的方式。
一、实现效果
目前家里就只有一个CH340的串口设备,但实现效果是可以看到还是比较成功的,显示的设备名称和串口号都是和电脑设备管理器一致的。
二、实现代码
1.检测可用串口,并把名称输出到ComboBox中,并自动根据设备名称的长度调整ComboBox下拉框的长度
代码如下:
1 int max_len = 0;
2 int pt_val = this->font().pointSize();//获取字体的磅值
3 QList <QSerialPortInfo> serialInfo_list = QSerialPortInfo::availablePorts();//获取到可用串口设备
4
5 PortStringList.clear(); //将用于存放串口设备名称的List清空
6 ui->portSelectcomboBox->clear(); //把下拉选择框也清空,因为这里是定时调用这段函数来扫描串口设备,所以每次记得要清空List和ComboBox,不然后面尾插就会重复了。。。
7 const auto infos = QSerialPortInfo::availablePorts();
8 for (const QSerialPortInfo &info : infos)
9 {
10 /* 先把串口号放到List */
11 PortNameStringList += info.portName();//这是一个QStringList,是用来放串口设备名称字符串的
12 PortStringList+= info.portName();//这个QStringList是用来放串口号的,因为后面选择串口的时候只能通过串口号去选择
13 }
14 for(int i = 0;i < serialInfo_list.size();i++)
15 {
16 PortNameStringList[i].append(serialInfo_list.at(i).description());//通过description()吧SerialPortInfo里面的串口设备名称转为QString并尾插到放串口设备名称的容器里,这样就能实现显示串口号和设备名称了
17
18 max_len = (PortNameStringList.at(i).length()>max_len)? PortNameStringList.at(i).length():max_len;//获取设备名称最长的的长度,用来配置下拉选项框的长度
19
20 }
21
22 ui->portSelectcomboBox->view()->setFixedWidth(max_len*pt_val*2);//配置下拉选项框的最大长度
23 ui->portSelectcomboBox->addItems(PortNameStringList);//将设备名称输出到对应的ComBox里