【QT串口】QT在下拉选择窗口(ComboBox)显示串口号

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传过去
    }
}

添加之后就可以在下拉窗口显示可用端口
请添加图片描述

Qt ComboBox(组合框)默认情况下是一个单列显示的控件,如果需要在下拉列表中显示多列数据,可以通过自定义模型(QStandardItemModel 或者 QTextTableModel)并设置模型的数据来实现。这里是一个简单的步骤指南: 1. 创建模型: - 使用 `QStandardItemModel` 或 `QTableWidget` 创建模型,根据你的数据结构决定使用哪种模型。 - 对于 `QStandardItemModel`,添加 `QStandardItem` 对象到每一行,每个 `QStandardItem` 可以包含多个子项来代表一列数据。 - 对于 `QTextTableModel`,设置表格的列数,并用 `setItem()` 方法填充单元格。 2. 设置模型: - 将模型绑定到 `QComboBox` 上,使用 `setModel(model)` 方法。 - 可以设置 `QAbstractItemView` 的模式为 `QListView` 或 `QTableView`,以显示不同样式。 3. 显示多列: - 在 `model->index()` 方法中,使用索引来访问多列数据,例如 `model->data(index, columnIndex)` 来获取指定行和列的数据。 - 如果需要,可以重写 `QComboBox` 的 `currentIndexChanged` 信处理函数,以便在选择不同的条目时动态更新显示内容。 4. 样式调整: - 可能需要根据数据调整下拉列表的宽度,以便所有列都能正确显示。可以使用 `setMinimumWidth()` 和 `setColumnWidth()` 方法。 相关问题: 1. 如何在 Qt ComboBox 中使用 `QStandardItemModel` 显示多列数据? 2. 除了 `QStandardItemModel`,还有哪些模型可以用来展示多列数据在 Qt ComboBox 中? 3. 如何动态调整 Qt ComboBox 下拉列表的列宽以适应多列显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值