自学Qt之路——串口编程(使用第三方提供的类)
来源:互联网 发布:定时任务软件 编辑:程序博客网 时间:2024/05/23 01:59
第三方提供的类,下载到的文件为qextserialport-1.2win-alpha,qextserialbase.cpp和 qextserialbase.h文件定义了一个 QextSerialBase 类,win_qextserialport.cpp和 win_qextserialport.h文件定义了一个 Win_QextSerialPort类,posix_qextserialport.cpp和 posix_qextserialport.h文件定义了一个 Posix_QextSerialPort类,qextserialport.cpp和 qextserialport.h文件定义了一个 QextSerialPort类。
在其中提供了串口的两个驱动方式,一个是EventDriven事件驱动方式,另一个是Polling查询方式。EventDriven事件驱动方式,一旦有数据到来,就会发出readyRead()信号,我们可以关联该信号来读取串口的数据。在事件驱动的方式下,串口的读写是异步的,调用读写函数会立即返回,它们不会冻结调用线程。
Polling查询方式,读写方式是同步执行,信号不能在这种模式下工作,而某些功能就无法实现。但是这种模式下的开销较小,我们需要建立自己的定时器来读取串口数据。
有一条非常重要:在Window下两种模式都能支持,但是在linux下只能是Polling方式。
一、在windows下使用事件驱动方式:
在工程中添加qextserialbase.cpp和 qextserialbase.h,win_qextserialport.cpp和 win_qextserialport.h,qextserialport.cpp和 qextserialport.h这六个文件
在头文件中把win_qextserialport.h包含进去
#include"win_qextserialport.h"
在头文件中声明私有对象和私有槽函数:
Win_QextSerialPort*myCom;//声明指针对象
void readMyCom();//声明读串口槽函数
在函数中设置串口参数:
Struct PortSettings myComSetting = { BAUD115200 ,DATA_8 ,PAR_NONE ,STOP_1 ,FLOW_OFF ,200 };//定义一个PortSettings类型的结构体,用来存放串口各个参数,PortSettings在qextserialbase.h中定义
myCom = new Win_QextSerialPort("COM4",myComSetting,QextSerialBase::EventDriven);//定义串口对象,并传递参数,在构造函数里对其进行初始化,使用事件驱动方式
myCom ->open(QIODevice::ReadWrite);//以可读写方式打开串口
connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作
构造读串口的槽函数:
voidMainWindow::readMyCom()//读串口函数
{
QByteArraytemp=myCom->readAll();
ui->textBrowser->insertPlainText(temp);//在浏览窗口中显示数据
}
二、在linux上使用polling查询方式:
在工程中加入qextserialbase.cpp和 qextserialbase.h,posix_qextserialport.cpp和 posix_qextserialport.h这四个文件
程序的串口设置跟Windows差不多,
头文件中:
将以前的#include "win_qextserialport.h"更改为#include"posix_qextserialport.h"
将以前的 Win_QextSerialPort *myCom;更改为Posix_QextSerialPort *myCom;
在函数中:
在函数中设置串口参数:
Struct PortSettingsmyComSetting = { BAUD115200,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,200 };//定义一个PortSettings类型的结构体,用来存放串口各个参数,PortSettings在qextserialbase.h中定义
myCom=newPosix_QextSerialPort("/dev/ttyUSB0",myComSetting,QextSerialBase::Polling);//注意Linux下的串口文件是在根目录里面的dev中,定义串口对象,并传递参数,在构造函数里对其进行初始化,使用查询方式
myCom->open(QIODevice::ReadWrite);//以可读写方式打开串口
在posix_qextserialport.cpp中修改setTimeout参数:
将原来的 setTimeout(Settings.Timeout_Sec,Setting.Timeout_Millisec);
改成setTimeout(Settings.Timeout_Millisec);
QByteArraytemp=myCom->readAll();//读缓冲区的数据
ui->textBrowser->insertPlainText(temp);//在浏览窗口中显示数据
- 自学Qt之路——串口编程(使用第三方提供的类)
- 自学Qt之路——串口编程(使用第三方提供的类)
- 自学Qt之路——串口编程(使用自带Qt库)
- 自学Qt之路——串口编程(使用自带Qt库)
- Qt上第三方串口类QExtSerialPort的使用
- Qt使用第三方类打开串口号10以上的失败问题解决方法
- Qt使用第三方串口类qextserialport无法打开串口的可能解决方案(文章中描述的可以解决)
- 深入浅出VC++串口编程之第三方类
- 深入浅出VC++串口编程之第三方类
- Qt第三方串口类应用方法
- 深入浅出VC++串口编程--第三方类
- [MFC]使用强大的第三方串口类 CSerialPort
- vc6.0利用第三方串口类实现串口编程
- 第三方库之—Glide的使用
- WebService学习总结(四)——调用第三方提供的webService服务(.net问题)
- 下拉刷新控件---使用第三方提供的源码
- Qt第三方库QML-Box2D——使用它创建一个飞翔的蝙蝠
- Qt之串口编程
- 时间格式化
- Spark运行WordCount结果存入mysql数据库
- 数字图像基础理论:频谱vs功率谱vs能谱
- bzoj1477青蛙的约会
- Android抓包方法(一) 之Fiddler代理
- 自学Qt之路——串口编程(使用第三方提供的类)
- 【C#】执行费时操作时提醒框的添加(开线程)
- AndroidStudio——TextView文字左右滚动(跑马灯效果)无效解决办法
- 欧几里得拓展算法求模逆元
- Android抓包方法(二) 之Tcpdump命令+Wireshark
- okHttp+protobuf实现okhttp post二进制流至服务器
- 机械臂建模与仿真(三):模拟环境测试moveit
- 《C++ primer plus》第十六章:string类和标准模板库(二) 学习笔记
- L1-02 打印沙漏