Qt作为跨平台的GUI类库,它为我们提供了几乎能够想象得到的所有功能。但Qt没有为我们提供串口操作类,一般都是使用第三方提供的qextserialport类,我们可以在:
http://sourceforge.net/projects/qextserialport/files/ 下载。
Windows下,我们只需要使用以下文件:qextserialbase.cpp、qextserialbase.h、qextserialport.cpp、qextserialport.h、win_qextserialport.cpp、win_qextserialport.h
Linux下,我们需要使用以下文件:qextserialbase.cpp、qextserialbase.h、qextserialport.cpp、qextserialport.h、posix_qextserialport.cpp、posix_qextserialport.h。
用粉色标示的两个代码文件在不同的操作系统下有所不同!
下面简单描述一下该类是如何使用的。
一、创建Qt工程,加入文件,如图
二、dialog.h、dialog.cpp为QDialog的派生类,在该类声明中做如下处理
dialog.h
... ...
#include "win_qextserialport.h"
#include "qextserialbase.h"
#include "qextserialport.h"
... ...
class Dialog : public QDialog{
Q_OBJECTpublic:explicit Dialog(QWidget *parent = 0);~Dialog();private:Ui::Dialog *ui;Win_QextSerialPort *myWinCom; // 定义串口操作对象指针struct PortSettings myComSettings; // 定义串口配置信息结构体变量... ...
int SendCounter,ReceiveCounter;
... ...
void getComSettings(); // 串口配置设定函数,串口配置内容存放在myComSettings中
... ...
private slots:void readMyWinCom(); //定义串口数据读处理过程(槽)void opencloseDeal(); //串口打开关闭操作
... ...
};
dialog.cpp
... ...
void Dialog::readMyWinCom(){
this->ReceiveCounter += this->myWinCom->size();//获取串口缓冲区中数据长度QByteArray temp = this->myWinCom->readAll(); //读取串口数据... ...
}
void Dialog::opencloseDeal(){
... ...
this->getComSettings();this->myWinCom = new Win_QextSerialPort(ui->comComboBox->currentText(),myComSettings,QextSerialBase::EventDriven);if (this->myWinCom->open(QIODevice::ReadWrite)== true){this->connect(myWinCom,SIGNAL(readyRead()),this,SLOT(readMyWinCom()));
... ...
}
... ...
}
... ...
void Dialog::getComSettings(){
this->myComSettings.FlowControl = FLOW_OFF;this->myComSettings.Timeout_Millisec = 500;... ...
}
... ...
在Qt中,串口的使用过程大概如上,根据上述过程,本人实现了串口调试助手软件,该软件可以进行16进制数