一、目标:
实现QtQuick界面,操控串口通信,进行串口数据的接收和发送
二、核心思想:
利用Qt库的QSerialPort类,使用C++实现串口数据的逻辑通信,并接受QtQuick界面的参数设置,在QML中调用C++实现的函数进行实际的数据收发
(QML与C++混合编程)
三、具体实现:
(1)C++中的逻辑实现
首先看serialport.h文件
#ifndef SERIALPORT_H
#define SERIALPORT_H
#include <QObject>
#include <QSerialPort>
class SerialPort : public QObject
{
Q_OBJECT
public:
explicit SerialPort(QObject *parent = nullptr);
~SerialPort();
Q_INVOKABLE bool serialConnect(QString port,QString baudrate,QString databits,QString parity,QString stopbits);
Q_INVOKABLE QString serialRead();
Q_INVOKABLE bool serialWrite(QString sendStr);
signals:
public slots:
private:
QSerialPort *m_serial;
};
#endif // SERIALPORT_H
其中,注册到QML环境中的类必须继承自QObject,在类中声明“Q_OBJECT”才能在C++中定义信号和槽,需要注册到QML环境中的,变量属性加关键字“Q_PROPERTY”,函数方法加关键字“Q_INVOKABLE”,定义了一个QSerialPort的对象,将在后续连接和通信中实现
serialport.cpp
#include "serialport.h"
SerialPort::SerialPort(QObject *parent) : QObject(parent)
{
m_serial = new Q