上一章我们完成了串口库的导入,并写了一段测试代码,接下来我们撸代码。今天由于网速比较慢,进不了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;
}
代码解读
- 首先在.h文件定义相关的方法和属性, 这里需要一个属性去存储可使用串口,所以定义 QList avaiPortsList; 然后定义一个专门处理刷新串口的函数void refreshPort(void);,然后我们在.cpp文件中实现这个函数
- refreshPort函数首先打印调试信息,确保进来了该函数。
- 然后调用QComboBox的clear方法清除已经显示的信息,接着调用QSerialPortInfo::availablePorts()方法获取可使用的串口信息。
- 获取完串口信息后调用QList的length()方法获取列表的长度。
- 接着逐个渲染串口信息, 调用addItem方法添加串口名字。