【Qt串口调试助手】1.3 - 重写ComboBox下拉框的鼠标点击事件,实现点击下拉框扫描可用串口

 

由于ComboBox没有鼠标点击信号,所以如果想实现点击下拉框响应,需要重写ComboBox下拉框的鼠标点击事件。在点击事件中,添加扫描可用串口代码,实现点击下拉框时重新扫描串口。并且下拉框内容输出端口硬件信息,便于区分与选择。

 

GitHub源码:Qt串口调试助手下载

实现结果:点击串口选择下拉框,重新扫描可用串口,并且显示端口硬件信息。

1. 新建类,继承 QComboBox,重写鼠标点击事件

代码中,对一些方法和属性的说明:

  • scanActivePort:扫描可用串口函数。由构造函数和鼠标点击事件使用。
  • QSerialPortInfo::portName:串口端口名称。
  • QSerialPortInfo::description:串口端口 硬件 / 驱动 信息。
  • showPopup:ComboBox弹出下拉框动作。

myComboBox.cpp

#include "mycombobox.h"

myComboBox::myComboBox(QWidget *parent) : QComboBox(parent)
{
    // 扫描可用串口
    scanActivePort();
}

// 扫描可用串口
void myComboBox::scanActivePort()
{
    // 先清空列表项,防止多次刷新后重叠
    clear();

    // 串口端口号列表
    QStringList serialPortName;

    // 自动扫描当前可用串口,返回值追加到字符数组中
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){

        //serialPortName << info.portName();// 不携带有串口设备信息的文本

        // 携带有串口设备信息的文本
        QString serialPortInfo = info.portName() + ": " + info.description();// 串口设备信息,芯片/驱动名称
        //QString serialPortInfo = info.portName() + ": " + info.manufacturer();// 串口设备制造商
        //QString serialPortInfo = info.portName() + ": " + info.serialNumber();// 串口设备的序列号,没什么用
        //QString serialPortInfo = info.portName() + ": " + info.systemLocation();// 串口设备的系统位置,没什么用
        serialPortName << serialPortInfo;
    }
    // 可用串口号,显示到串口选择下拉框中
    this->addItems(serialPortName);
}

// 重写鼠标点击事件
void myComboBox::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        // 扫描可用串口
        scanActivePort();

        // 弹出下拉框
        showPopup();
    }
}

myComboBox.h

#ifndef MYCOMBOBOX_H
#define MYCOMBOBOX_H

#include <QComboBox>
#include <QMouseEvent>
#include <QSerialPort>
#include <QSerialPortInfo>

class myComboBox : public QComboBox
{
    Q_OBJECT
public:
    explicit myComboBox(QWidget *parent = nullptr);

    // 重写鼠标点击事件
    void mousePressEvent(QMouseEvent *event);

signals:

private:
    void scanActivePort();

};

#endif // MYCOMBOBOX_H

2. 打开串口时,过滤串口信息

通过上面的代码,我们对 cmbSerialPort下拉框进行了重写,使其在鼠标点击时重新扫描端口,并将字符串列表添加上了硬件信息。而设置串口名称时,输入 "COM4: CH340" 这样带有硬件信息的字符串,应用会报错,导致打开端口不成功。这时需要对其进行过滤,使其仅输入 "COM4" "COM12" 这样的字符串,过滤掉后面的 ": xxx"字段 。

section(':', 0, 0) 和 mid(0, spTxt.indexOf(":")) 两种方法均可。都能达到过滤串口端口信息的效果。

 

GitHub源码:Qt串口调试助手下载

猜你喜欢

转载自blog.csdn.net/Mark_md/article/details/109048127