彩票走势图

Qt教程:如何运用QBuffer类实现缓冲区,接收FPGA通过DMA传输的数据

转帖|使用教程|编辑:鲍佳佳|2020-11-26 10:34:29.313|阅读 1752 次

概述:本来想自己设计一个缓冲区来接收数据,但是还得考虑数据的安全性和互斥等。在Qt串口通信程序-汽车辐射监测系统中,我曾经实现过高速采集串口数据的缓冲区,但是当时对锁的处理还是挺麻烦的。现在看到Qt已经设计了一个类QBuffer,来实现抽象类QIODevice,这样就可以和硬件设备直接打交道了。我们不再需要关心数据的安全性问题了,甚至也不需要自己撰写很多接口了。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

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 () const
const QByteArray &	data () const
void	setBuffer ( QByteArray * byteArray )
void	setData ( const QByteArray & data )
void	setData ( const char * data, int size )

Reimplemented Public Functions

virtual bool	atEnd () const
virtual bool	canReadLine () const
virtual void	close ()
virtual bool	open ( OpenMode flags )
virtual qint64	pos () const
virtual bool	seek ( qint64 pos )
virtual qint64	size () 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;
    }

好了这就是今天的内容了,如果今天的文章未解决你的需求,可点击获取更多免费教程。不要忘了在评论与我们分享您的想法和建议。

本文转载自:


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP