轉帖|使用教程|編輯:鮑佳佳|2020-11-26 10:34:29.313|閱讀 1918 次
概述:本來想自己設計一個緩沖區來接收數據,但是還得考慮數據的安全性和互斥等。在Qt串口通信程序-汽車輻射監測系統中,我曾經實現過高速采集串口數據的緩沖區,但是當時對鎖的處理還是挺麻煩的。現在看到Qt已經設計了一個類QBuffer,來實現抽象類QIODevice,這樣就可以和硬件設備直接打交道了。我們不再需要關心數據的安全性問題了,甚至也不需要自己撰寫很多接口了。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行?,F在我們為你提供了免費的試用版。趕快點擊下載Qt6最新試用版>>
本來想自己設計一個緩沖區來接收數據,但是還得考慮數據的安全性和互斥等。在Qt串口通信程序-汽車輻射監測系統中,我曾經實現過高速采集串口數據的緩沖區,但是當時對鎖的處理還是挺麻煩的。現在看到Qt已經設計了一個類QBuffer,來實現抽象類QIODevice,這樣就可以和硬件設備直接打交道了。我們不再需要關心數據的安全性問題了,甚至也不需要自己撰寫很多接口了。
QBuffer Class ReferenceThe QBuffer class provides a QIODevice interface for a QByteArray. More...
#include
Inherits: QIODevice.
Note: All functions in this class are reentrant.
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
//待寫入的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@ke049m.cn