QT开发串口助手(二)——实现点击按钮刷新串口功能

上一章我们完成了串口库的导入,并写了一段测试代码,接下来我们撸代码。今天由于网速比较慢,进不了QT官网, 但是我在QT助手上搜索,也可以看到帮助文档。

一. 测试代码讲解

QList QSerialPortInfo::availablePorts()函数返回一系列可使用的QSerialPortInfo对象
在这里插入图片描述
我们再看看QSerialPortInfo对象有什么熟悉或者方法,如下图所示,有这些方法, 所以我们的测试代码中,直接打印端口的portName()。
在这里插入图片描述

二. 页面显示可用的串口信息

1. UI布局

双击工程目录下的xxxx.UI文件,拖拽一个pushButton和comboBox到布局页面中。
在这里插入图片描述
在这里插入图片描述
对pushButton和comboBox修改一下className和pushBotton的显示名字
在这里插入图片描述
在这里插入图片描述
接下来我们完成点击刷新串口按钮,然后在ComboBox中显示相应的串口号。

2.完成刷新串口功能

mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPortInfo>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    /* 定义可用端口列表变量*/
    QList<QSerialPortInfo> avaiPortsList;

    /*刷新串口信号*/
    void refreshPort(void);
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QPushButton"
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    /*刷新串口*/
    this->refreshPort();
    /* 点击刷新功能显示*/
    connect(ui->refreshPortBtn, &QPushButton::clicked, this, &MainWindow::refreshPort);
}

/*刷新串口处理函数*/
void MainWindow::refreshPort()
{
    qDebug() << "刷新串口";
    /*清除comboxBox的内容,防止显示重复的串口*/
    ui->displayPortComboBox->clear();

    /* 读取可以使用的串口*/
    this->avaiPortsList = QSerialPortInfo::availablePorts();
    /* 提取串口个数*/
    int avaiPortNum = avaiPortsList.length();

    /*逐个显示*/
    for(int i = 0; i < avaiPortNum; i++)
    {
        ui->displayPortComboBox->addItem(this->avaiPortsList[i].portName());
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

代码解读

  1. 首先在.h文件定义相关的方法和属性, 这里需要一个属性去存储可使用串口,所以定义 QList avaiPortsList; 然后定义一个专门处理刷新串口的函数void refreshPort(void);,然后我们在.cpp文件中实现这个函数
  2. refreshPort函数首先打印调试信息,确保进来了该函数。
  3. 然后调用QComboBox的clear方法清除已经显示的信息,接着调用QSerialPortInfo::availablePorts()方法获取可使用的串口信息。
  4. 获取完串口信息后调用QList的length()方法获取列表的长度。
  5. 接着逐个渲染串口信息, 调用addItem方法添加串口名字。
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用C++版本的Qt开发串口调试助手的步骤: 1. 创建一个Qt工程,使用QWidget作为默认控件。 2. 在工程中添加一个串口类,用于发送和接收数据。可以使用Qt自带的QSerialPort类。 3. 在界面中添加两个文本框和几个按钮,用于实现数据的接收和发送,并设置串口通信的参数。 4. 在代码中实现针对串口数据的解析。 5. 在widget.h中添加相关的函数和变量的声明,并进行指针申明。 6. 在widget.cpp中实现具体的函数功能,包括定时接收串口数据等。 下面是一个简单的示例代码,用于打开串口并发送数据: ```cpp #include "widget.h" #include "ui_widget.h" #include <QSerialPort> #include <QSerialPortInfo> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 查找可用的串口 foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { QSerialPort serial; serial.setPort(info); if(serial.open(QIODevice::ReadWrite)) { ui->comboBox->addItem(info.portName()); serial.close(); } } // 设置波特率下拉菜单默认显示第0项 ui->comboBox_2->setCurrentIndex(0); // 初始化串口 serial = new QSerialPort(this); connect(serial, SIGNAL(readyRead()), this, SLOT(readData())); // 打开串口 serial->setPortName(ui->comboBox->currentText()); serial->setBaudRate(ui->comboBox_2->currentText().toInt()); serial->setDataBits(QSerialPort::Data8); serial->setParity(QSerialPort::NoParity); serial->setStopBits(QSerialPort::OneStop); serial->setFlowControl(QSerialPort::NoFlowControl); serial->open(QIODevice::ReadWrite); } Widget::~Widget() { delete ui; } void Widget::on_pushButton_clicked() { // 发送数据 serial->write(ui->textEdit->toPlainText().toLatin1()); } void Widget::readData() { // 接收数据 QByteArray data = serial->readAll(); ui->textEdit_2->append(data); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零涂

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值