本来想自己设计一个缓冲区来接收数据,但是还得考虑数据的安全性和互斥等。在Qt串口通信程序-汽车辐射监测系统中,我曾经实现过高速采集串口数据的缓冲区,但是当时对锁的处理还是挺麻烦的。现在看到Qt已经设计了一个类QBuffer,来实现抽象类QIODevice,这样就可以和硬件设备直接打交道了。我们不再需要关心数据的安全性问题了,甚至也不需要自己撰写很多接口了。
Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。赶快点击下载Qt6最新试用版>>
本来想自己设计一个缓冲区来接收数据,但是还得考虑数据的安全性和互斥等。在Qt串口通信程序-汽车辐射监测系统中,我曾经实现过高速采集串口数据的缓冲区,但是当时对锁的处理还是挺麻烦的。现在看到Qt已经设计了一个类QBuffer,来实现抽象类QIODevice,这样就可以和硬件设备直接打交道了。我们不再需要关心数据的安全性问题了,甚至也不需要自己撰写很多接口了。
QBuffer Class Reference
The QBuffer class provides a QIODevice interface for a QByteArray. More…
#include
Inherits: QIODevice.
Note: All functions in this class are reentrant.
- List of all members, including inherited members
Public Functions
QBuffer ( QObject * parent = 0 )QBuffer ( QByteArray * byteArray, QObject * parent = 0 )~QBuffer ()QByteArray &buffer ()const QByteArray &buffer () constconst QByteArray &data () constvoidsetBuffer ( QByteArray * byteArray )voidsetData ( const QByteArray & data )voidsetData ( const char * data, int size )
Reimplemented Public Functions
virtual boolatEnd () constvirtual boolcanReadLine () constvirtual voidclose ()virtual boolopen ( OpenMode flags )virtual qint64pos () constvirtual boolseek ( qint64 pos )virtual qint64size () const
- 代码例子实现如何往缓冲区写入数据,然后如何读取缓冲区数据。33 public functions inherited from QIODevice
- 29 public functions inherited from QObject
//待写入的quint32型数组 quint32 * dataUInt32 = new quint32[2000000](); for(int i = 0; i <</SPAN> 2000000; i++) dataUInt32[i] = i; //转换成char*指针 char * dataChar = (char *)dataUInt32; // //数据源 QByteArray byteArray; //缓冲区绑定数据源 QBuffer buffer(&byteArray); //只写模式打开缓冲区 buffer.open(QIODevice::WriteOnly); //写入缓冲区 qint64 a = buffer.write(dataChar,2000000*4); //关闭缓冲区 buffer.close(); //QDataStream out(&buffer); // //打开缓冲区 buffer.open(QIODevice::ReadOnly); //读取方法1:QIODevice::read(char* data,qint64 maxSize) char* test = (char *)new quint32[2000000*4]; buffer.read(test,2000000*4); quint32* res = (quint32* ) test; for(int i = 0; i <</SPAN> 2000000; i++) qDebug() << res[i]; //读取方法2:QDataStream QDataStream in(&buffer); quint32 m ; in.setByteOrder(QDataStream::LittleEndian); qDebug() << buffer.bytesAvailable(); while(!in.atEnd()) { in >> m; qDebug() << m; }好了这就是今天的内容了,如果今天的文章未解决你的需求,可点击获取更多免费教程。不要忘了在评论与我们分享您的想法和建议。
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!