RYMCU

Qt5串口调试助手(10)--串口端口号自动刷新

Hugh 4 年前
# 串口调试助手 # 自动刷新

概述

目前,串口端口号只有在软件启动时,自动刷新一次。如果打开软件之后,串口有变动,需要重启软件才能获得新的端口号,似乎不太智能。我们希望只需要点击“串口端口”下拉框就能自动刷新,而无需重新启动软件!该功能可通过重写下拉框类方法实现,内容来源于网络,搬运至此,方便大家应用。

端口刷新.png

1.添加自定义下拉框方法

重定义方法.png

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

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();
    }
}

2.在界面设计区,更改端口下拉框的类,由原来的 QcomboBox 提升为自定义的 myComboBox,如下图所示。

提升类.png

3.小结

按照上述方法操作可实现点击下拉框刷新端口功能。

后发布评论