Qt——QtSerialPort/QSerialPort(一)
来源:互联网 发布:oracle update sql语句 编辑:程序博客网 时间:2024/05/17 09:15
1.在H文件中创建串口类class SPComm ——定义相关的变量,函数
2.在Cpp文件中,完善函数功能
3.两者之间的桥梁是基于QSerialPort *m_serialport这个变量
4.例子
如:m_serialport->isOpen()来判断COM口是否打开,进一步完善SPComm中 bool isOpen() const; 这个函数。
5.注意
在函数实现的过程中,第一要注意,在func名前加类名 SPComm :: func();
第二,函数名一定要一致,如bool isOpen() const 一定要加const ,否则会出错。
#ifndef SERIALCOM_H#define SERIALCOM_H#include <QObject>#include <QtSerialPort/QSerialPort>#include <QtSerialPort/QSerialPortInfo>class SPComm : public QObject{ Q_OBJECTpublic : explicit SPComm(QObject *parent = 0); ~SPComm(); bool isOpen() const; void setPortName(const QString &name); QString portName() const; void setBaudRate(int baudRate); int baudRate() const; virtual bool open(); virtual void close(); virtual bool clear(); int readData(char *buffer, int count, int timeout = 1000); int writeData(char *data, int size); int write(char ch);protected : QString m_portname; int m_baudRate; QSerialPort *m_serialPort;signals :public slots:};#endif // SERIALCOM_H
#include "mainwindow.h"#include <QApplication>#include <QObject>#include <QtSerialPort/QSerialPort>#include <QtSerialPort/QSerialPortInfo>#include <serialcom.h>static QSerialPort::BaudRate getBaudRate(int baudRate){ switch (baudRate) { case 1200: return QSerialPort ::Baud1200; break; case 2400: return QSerialPort::Baud2400; break; case 4800: return QSerialPort ::Baud4800; break; case 9600: return QSerialPort ::Baud9600; break; case 19200: return QSerialPort ::Baud19200; break; case 38400: return QSerialPort ::Baud38400; break; case 57600: return QSerialPort ::Baud57600; break; case 115200: return QSerialPort ::Baud115200; break; default : return QSerialPort ::UnknownBaud; }}//设置串口名void SPComm::setPortName(const QString &name){ m_portname = name;}QString SPComm::portName() const{ return m_portname;}//设置波特率void SPComm::setBaudRate(int baudRate){ m_baudRate = baudRate;}//p判断串口是否打开bool SPComm::isOpen() const{ if(m_serialPort->isOpen()) return true; else return false;}//打开串口bool SPComm::open(){ if(m_serialPort->isOpen()) { return true; } m_serialPort->setPortName(m_portname); m_serialPort->setBaudRate(getBaudRate(m_baudRate)); m_serialPort->setParity(QSerialPort::NoParity); m_serialPort->setDataBits(QSerialPort::Data8); m_serialPort->setStopBits(QSerialPort::OneStop); m_serialPort->setFlowControl(QSerialPort::NoFlowControl); m_serialPort->setReadBufferSize(1024); return m_serialPort->open(QSerialPort::ReadWrite);}//关闭串口void SPComm::close(){ if(m_serialPort->isOpen()) { m_serialPort->close(); }}//重启串口并清除数据bool SPComm::clear(){ if(m_serialPort->isOpen()) { m_serialPort->clear(); //清除 this->close(); return this->open(); //重启 } return false;}//接受数据int SPComm::readData(char *buffer, int count, int timeout){ int len = 0; forever { int n = m_serialPort->read(&buffer[len],count-len); if(n == -1) { return -1; } else if(n == 0 && m_serialPort->waitForReadyRead(timeout)) { return -2; } else { len += n; if(count == len ) break; } } return len;}//发送数据int SPComm::writeData(char *data, int size){ int len = 0; forever { int n = m_serialPort->write(&data[len],size-len); if(n == -1) { return -1; } else { len += n; if(size == len) break; } } return len;}//够着函数并添加初始化参数SPComm::SPComm(QObject *parent) :QObject(parent){ m_serialPort = new QSerialPort(); m_baudRate = 115200; m_portname = "";}//析构SPComm::~SPComm(){ delete m_serialPort;}
注意将指针delete
本文涉及到的有 m_serialPort —— QSerialPort类 protected
m_spcomm —— SPComm 类 private
运行结果:
这是经过测验的cpp与h文件,版本Qt5.7,串口功能会进一步完善……
阅读全文
0 0
- Qt——QtSerialPort/QSerialPort(一)
- Qt:QSerialPort的多线程扩展
- QT:Qt4添加QSerialPort模块
- QSerialPort
- QSerialPort
- Qt 串口类QSerialPort 使用笔记
- Qt 串口类QSerialPort 使用笔记
- Qt之串口类QSerialPort使用笔记
- Qt 串口类QSerialPort 使用笔记
- Qt 串口类QSerialPort 学习笔记
- (1)Qt利用QSerialPort使用串口
- 使用QT-QSerialport打不开串口的原因
- Qt 串口类QSerialPort 使用笔记
- Qt 串口类QSerialPort 使用笔记
- Windows下使用Qt4.8编译安装qt-qtserialport经验教训
- Qt网络通信骨架解析,QtClient QtServer QtSerialPort
- QT 使用串口类出现“undefined reference to QSerialPort::QSerialPort(QObject*)错误
- QT串口编程的相关类2(QSerialPort)
- 【图像处理】Python-Image 基本的图像处理操作 【转载】
- CentOS 7.0 安装配置php环境 Apache+PHP+mariadb
- 多年 iOS 开发经验总结
- AlarmManager小例子
- Qt
- Qt——QtSerialPort/QSerialPort(一)
- swift学习--闭包
- activity转fragment
- C语言 const static 静态变量 全局变量 局部变量
- kprobe
- Ubuntu 安装Node.js、Express和MySQL
- PHP实现快速排序算法
- Cocoapods 2017最新安装图文教程及快速安装方法
- FTP服务端文件下载到本地