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