Qt软件编程,windows下的Qt编程,实现功能串口通信,数据发送和接收。根据协议编写打印机串口通信程序。
工具/原料
windowsxp系统一个
Qt5.4.1软件安装包
方法/步骤
1、新建一个Qt项目:文件->新建文件或项目(ctrl+n)
2、单机choose之后
3、全部下一步到完成
4、成功建立一个QtWidgetsApplication
5、新建一个管理SerialPort的类右击项目名字->添加新文件弹出如下框:
6、选择C++Class,单机choose弹出如下框:并填写单机下一步之后单机完成
7、编写SPComm类:在SPComm.h中加入头文件#include<QtSerialPort/QtSerialPort>
8、在头文件中声明串口功能:boolisOpen()const;void咯悝滩镞setPortName(constQString&name);求溻皑恰QStringportName()const;voidsetBaudRate(intbaudRate);intbaudRate()const;virtualboolopen();virtualvoidclose();virtualboolclear();intreadData(char*buffer,intcount,inttimeout=1000);intwriteData(char*data,intsize);intwrite(charch);protected:QStringm_portName;intm_baudRate;QSerialPort*m_serialPort;
9、在CPP文件中实现对应的功能://这个函数用来设置波特率,打开串口的时候用到sta隋茚粟胫ticQSerialPort::BaudRatege墉掠载牿tBaudRate(intbaudRate){switch(baudRate){case1200:returnQSerialPort::Baud1200;case2400:returnQSerialPort::Baud2400;case4800:returnQSerialPort::Baud4800;case9600:returnQSerialPort::Baud9600;case19200:returnQSerialPort::Baud19200;case38400:returnQSerialPort::Baud38400;case57600:returnQSerialPort::Baud57600;case115200:returnQSerialPort::Baud115200;default:returnQSerialPort::UnknownBaud;}}//这个函数用来设置串口的名字//window下用"com1"linux下用"/dev/ttyS0"voidSPComm::setPortName(constQString&name){m_portName=name;}//用来获取串口的名字QStringSPComm::portName()const{returnm_portName;}//设置波特率96001920038400voidSPComm::setBaudRate(intbaudRate){m_baudRate=baudRate;}//用来打开串口,调用前,先设置串口名字和波特率boolSPComm::open(){if(m_serialPort->isOpen()){returntrue;}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);returnm_serialPort->open(QSerialPort::ReadWrite);}
10、//用来关闭串口voidSPComm::close(){if(m_serialPort->isOpen()){m_serialPort->close();}}
11、//重启串口,清楚数据boolSPComm::clear(){if(m_serialPort->isOpen()){m_serialPort->clear();this->close();returnthis->open();}returnfalse;}
12、//用来接收串口发来的数据intSPComm::readData(char*buffer,坡纠课柩intcount,惺绅寨瞀inttimeout){intlen=0;forever{intn=m_serialPort->read(&buffer[len],count-len);if(n==-1){return-1;}elseif(n==0&&!m_serialPort->waitForReadyRead(timeout)){return-2;}else{len+=n;if(count==len)break;}}returnlen;}
13、//发送数据到串口比如发送协议intSPComm::writeData(char*data巳呀屋饔,intsize){intlen=0;forever{int惺绅寨瞀n=m_serialPort->write(&data[len],size-len);if(n==-1){return-1;}else{len+=n;if(size==len)break;}}returnlen;}
14、//别忘记了//构造函数添加初始化数据SPComm::SPComm(QObject*par娣定撰钠ent):惺绅寨瞀QObject(parent){m_serialPort=newQSerialPort();m_baudRate=9600;m_portName="";}//析构的时候删除数据SPComm::~SPComm(){deletem_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=newSPComm();析构函数中添加deletem_spcomm;
22、双击mainwindow.cpp回到按钮那里添加功能voidMainWindow::o艘绒庳焰n_pushButton_click髫潋啜缅ed(){if(m_spcomm->isOpen())return;m_spcomm->setBaudRate(9600);m_spcomm->setPortName("com1");if(m_spcomm->open())qDebug()<<"打开串口成功";}
23、同上关闭串口的代码为voidMainWindow::on_pushButton_2_clicked(){if(m_spcomm->isOpen())m_spcomm->close();qDebug()<<"关闭串口成功";}
24、点击按钮编译并且运行成
25、如果想编写一个打印机串口程序根据以上步骤同理添加一个Printer类根据协议编发送指令,写打印机的功能。比如发送协议进行切纸换行打印数据