用Qt编写一个串口通讯程序

Qt软件编程,windows下的Qt编程,实现功能串口通信,数据发送和接收。
根据协议编写打印机串口通信程序。

操作方法

  • 01

    新建一个Qt项目: 文件->新建文件或项目(ctrl+n)

  • 02

    单机 choose 之后

  • 03

    全部下一步到完成

  • 04

    成功建立一个Qt Widgets Application

  • 05

    新建一个管理SerialPort的类   右击项目名字->添加新文件  弹出  如下框:

  • 06

    选择C++ Class,单机 choose 弹出如下框: 并填写  单机下一步  之后  单机完成

  • 07

    编写SPComm类: 在SPComm.h中加入头文件 #include <QtSerialPort/QtSerialPort>

  • 08

    在头文件中 声明串口功能: 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;

  • 09

    在CPP文件中实现对应的功能: //这个函数用来设置波特率,打开串口的时候用到 static QSerialPort::BaudRate getBaudRate(int baudRate) { switch (baudRate) { case 1200: return QSerialPort::Baud1200; case 2400: return QSerialPort::Baud2400; case 4800: return QSerialPort::Baud4800; case 9600: return QSerialPort::Baud9600; case 19200: return QSerialPort::Baud19200; case 38400: return QSerialPort::Baud38400; case 57600: return QSerialPort::Baud57600; case 115200: return QSerialPort::Baud115200; default: return QSerialPort::UnknownBaud; } } //这个函数用来设置串口的名字 //window 下用"com1"   linux下用"/dev/ttyS0" void SPComm::setPortName(const QString &name) { m_portName = name; } //用来获取串口的名字 QString SPComm::portName() const { return m_portName; } //设置波特率 9600  19200  38400 void SPComm::setBaudRate(int baudRate) { m_baudRate = baudRate; } //用来打开串口,调用前,先设置串口名字和波特率 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); }

  • 10

    //用来关闭串口 void SPComm::close() { if (m_serialPort->isOpen()) { m_serialPort->close(); } }

  • 11

    //重启串口,清楚数据 bool SPComm::clear() { if (m_serialPort->isOpen()) { m_serialPort->clear(); this->close(); return this->open(); } return false; }

  • 12

    //用来接收串口发来的数据 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; }

  • 13

    //发送数据到串口  比如发送协议 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; }

  • 14

    //别忘记了 //构造函数 添加初始化数据 SPComm::SPComm(QObject *parent) : QObject(parent) { m_serialPort = new QSerialPort(); m_baudRate = 9600; m_portName = ""; } //析构的时候  删除 数据 SPComm::~SPComm() { delete m_serialPort; }

  • 15

    串口类编写完成: 测试一下能否调用: 1.双击mainwindow.ui

  • 16

    切换到了设计模式: 2 拖入按钮

  • 17

    3 双击按钮,设置按钮的名字

  • 18

    4设置好按钮的名字为 <打开串口> 5右击按钮->转到曹->选择clicked()->点击OK 跳转到了 一下界面

  • 19

    为这个按钮添加功能代码: 首先在mainwindow.h中添加SPComm.h的头文件

  • 20

    在mainwindow.h头文件中,添加这行代码 SPComm *m_spcomm; private: Ui::MainWindow *ui; SPComm *m_spcomm;

  • 21

    在mainwindow.cpp的构造函数中 添加  m_spcomm = new SPComm(); 析构函数中 添加delete m_spcomm;

  • 22

    双击mainwindow.cpp 回到按钮那里添加功能 void MainWindow::on_pushButton_clicked() { if(m_spcomm->isOpen()) return; m_spcomm->setBaudRate(9600); m_spcomm->setPortName("com1"); if(m_spcomm->open()) qDebug() << "打开串口成功"; }

  • 23

    同上关闭串口的代码为 void MainWindow::on_pushButton_2_clicked() { if(m_spcomm->isOpen()) m_spcomm->close(); qDebug() << "关闭串口成功"; }

  • 24

    点击 按钮 编译 并且运行成

  • 25

    如果想编写一个打印机串口程序 根据以上步骤 同理 添加一个Printer类 根据协议编发送指令,写打印机的功能。 比如发送协议  进行 切纸  换行  打印数据

(0)

相关推荐

  • 如何编写一个简单的程序

    想了解体验程序员的生活么,和我一起来编写一个简单的程序吧 操作方法 01 首先下载一个如图软件,并点击进入 02 选择关闭 03 找到界面左上侧文件选项并点击下拉菜单的新建选项 04 默认是工程选项, ...

  • 如何使用Visual Studio 2010编写一个C语言程序

    本将手把手教大家如何通过VS2010编写一个简单的C语言小程序 操作方法 01 双击打开Vs 2010 02 找到左上角的新建项目并点击打开,选择win32控制台程序,给文件命名,如123,单击确定 ...

  • 用汇编语言编写一个简单的程序

    用汇编语言编写一个<输入大写字母同时显示大小写字母>的程序! 操作方法 01 打开汇编编辑软件,如下: 02 输入如下的程序段:(记得认真输入) 03 接上不程序段:(记得认真输入) 04 ...

  • 如何用C语言编写一个简单的程序!

    上了大学有很多同学都在学习C语言,C++就是C语言的一种,那么怎么用c语言写一个简单的程序hello world呢,下边来给大家演示一下 操作方法 01 鼠标左键双击c语言软件,打开,打开后界面如图, ...

  • 用Python和WxPython编写一个简单窗口程序

    WxPython是一个专业的图形用户界面(GUI)工具包,是WxWidget的Python实现版本.它能开发效果很好的GUI界面.我们来学习一下用它实现的简单程序开发. 建立WxPython窗口框架 ...

  • 如何使用visual studio 2017编写一个C++程序

    这篇将会教大家如何编写一个简单的C++程序 操作方法 01 点击打开VS2017 02 依次点击菜单栏的 文件--新建--项目 03 依次选择选择[Visual C++]-[Win32]-[Win32 ...

  • 如何用VC++编写一个简单程序hello!c world!

    很多同学都希望编写一些程序,那么如何编写一个简单的c语言程序hello,world呢? 操作方法 01 首先打开电脑安装好的程序Visual C++,进入主界面后如图所示. 02 选择文件--> ...

  • 怎么用VC2010编写一个C程序

    我们编写C程序一般都是用Tubro C编辑器,那么如何用VC2010编写C程序呢?下面小编给大家分享一下. 操作方法 01 首先打开VC2010编辑器,新建一个Win32应用程序,如下图所示 02 接 ...

  • 怎样创建一个window应用程序

    我们将介绍如何创建window应用程序,如何利用基本控件设计窗体,我们采用案例的形式给大家讲解,案例:制作系统登录界面。这里我们结合ADO.NET实现高校学生管理系统(StudentSys)的登录界面 ...