前言
因为后面想用Qt做一个PID控制器(调式助手),具体有啥功能暂时也没法想得那么全面,但串口通信肯定是最最基础的吧,再加上之前没有学习过Qt,C++水平也菜的不行,所以先实现一个具备最简单的串口收发功能的串口调式助手试试水。
正是因为菜,所以当我们要真正做一件事情的时候,不要急于求成,做好先前工作很重要。所以呢我去简单回顾了一下C++(学过一点,但基本没用过,属于不会的那种),又在b站上看了几个Qt入门视频,最后在网上学习别人是如何实现Qt的串口通信的。一圈下来之后,我对我要做的事情基本上就有个底了。应该说,不难。这里我也把我实现的过程做个分享,毕竟从连C++都不太会到完成一个小小的作品,怎么说也是有成就感的。
QSerialPort
我使用的是Qt5.13.2版本,Qt5提供了QSerialPort模块,可以很方便地完成串口通讯所需要的设置;QSerialPort模块提供了两个C++类,分别是 QSerialPort 和 QSerialPortInfo。
QSerialPort:提供访问串行端口的功能
QSerialPortInfo: 提供有关现有串行端口的信息
QSerialPort使用方法
- 在pro文件中引入串口库:
QT += serialport
- 在.h文件中包含相应的头文件:
#include <QSerialPort>
#include <QSerialPortInfo>
这样你就可以愉快的使用Qt提供的QSerialPort模块的功能了。
实现
1.新建一个MainWindow项目
这里简单介绍一下,QMainWindow是Qt窗口部件的一种基类,Qt Creator提供的默认基类有三种,分别是QMainWindow,QWidget和QDialog:
QMainWindow是带有菜单栏和工具栏的主窗口类
QDialog是各种对话框的基类
QMainWindow和QDialog继承自QWidget
我这里也没作太多的考虑,就选择QMainWindow吧。
2.UI界面设计
在Qt Designer中添加所需控件,针对控件的功能,修改相应的名字,方便后续代码的编写。
3.编写代码
pro文件
如上面提到的,在pro文件中添加:
QT += serialport
如果你想自定义最后生成的exe文件的名称,可以再添加一行:
TARGET = serialport //serialport就是最后的 exe文件名称
mymainwindow.h
在这里添加串口库头文件,声明槽函数,并实例一个QSerialPort对象:
#ifndef MYMAINWINDOW_H
#define MYMAINWINDOW_H
#include <QMainWindow>
/* 串口头文件 */
#include <QSerialPort> //提供访问串行端口的功能
#include <QSerialPortInfo> //提供有关现有串行端口的信息
QT_BEGIN_NAMESPACE
namespace Ui {
class MyMainWindow; }
QT_END_NAMESPACE
class MyMainWindow : public QMainWindow
{
Q_OBJECT
public:
MyMainWindow(QWidget *parent = nullptr);
~MyMainWindow();
private slots: //槽函数
void read_data();
void on_btn_open_serial_clicked();
void on_btn_send_clicked();
void on_btn_clear_clicked();
void on_btn_send_clear_clicked();
private:
Ui::MyMainWindow *ui;
QSerialPort serial; //实例QSerialPort对象
};
#endif // MYMAINWINDOW_H
mymainwindow.cpp
#include "mymainwindow.h"
#include "ui_mymainwindow.h"
#include