轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2020-11-26 10:34:29.313|閱讀 1899 次
概述:本來(lái)想自己設(shè)計(jì)一個(gè)緩沖區(qū)來(lái)接收數(shù)據(jù),但是還得考慮數(shù)據(jù)的安全性和互斥等。在Qt串口通信程序-汽車輻射監(jiān)測(cè)系統(tǒng)中,我曾經(jīng)實(shí)現(xiàn)過(guò)高速采集串口數(shù)據(jù)的緩沖區(qū),但是當(dāng)時(shí)對(duì)鎖的處理還是挺麻煩的。現(xiàn)在看到Qt已經(jīng)設(shè)計(jì)了一個(gè)類QBuffer,來(lái)實(shí)現(xiàn)抽象類QIODevice,這樣就可以和硬件設(shè)備直接打交道了。我們不再需要關(guān)心數(shù)據(jù)的安全性問(wèn)題了,甚至也不需要自己撰寫(xiě)很多接口了。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷售中 >>
Qt是一個(gè)跨平臺(tái)框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中非常有用。而且它也可以在三種主要的臺(tái)式機(jī)操作系統(tǒng)以及移動(dòng)操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運(yùn)行。現(xiàn)在我們?yōu)槟闾峁┝嗣赓M(fèi)的試用版。趕快點(diǎn)擊下載Qt6最新試用版>>
本來(lái)想自己設(shè)計(jì)一個(gè)緩沖區(qū)來(lái)接收數(shù)據(jù),但是還得考慮數(shù)據(jù)的安全性和互斥等。在Qt串口通信程序-汽車輻射監(jiān)測(cè)系統(tǒng)中,我曾經(jīng)實(shí)現(xiàn)過(guò)高速采集串口數(shù)據(jù)的緩沖區(qū),但是當(dāng)時(shí)對(duì)鎖的處理還是挺麻煩的。現(xiàn)在看到Qt已經(jīng)設(shè)計(jì)了一個(gè)類QBuffer,來(lái)實(shí)現(xiàn)抽象類QIODevice,這樣就可以和硬件設(shè)備直接打交道了。我們不再需要關(guān)心數(shù)據(jù)的安全性問(wèn)題了,甚至也不需要自己撰寫(xiě)很多接口了。
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
//待寫(xiě)入的quint32型數(shù)組 quint32 * dataUInt32 = new quint32[2000000](); for(int i = 0; i <</SPAN> 2000000; i++) dataUInt32[i] = i; //轉(zhuǎn)換成char*指針 char * dataChar = (char *)dataUInt32; // //數(shù)據(jù)源 QByteArray byteArray; //緩沖區(qū)綁定數(shù)據(jù)源 QBuffer buffer(&byteArray); //只寫(xiě)模式打開(kāi)緩沖區(qū) buffer.open(QIODevice::WriteOnly); //寫(xiě)入緩沖區(qū) qint64 a = buffer.write(dataChar,2000000*4); //關(guān)閉緩沖區(qū) buffer.close(); //QDataStream out(&buffer); // //打開(kāi)緩沖區(qū) 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; }
好了這就是今天的內(nèi)容了,如果今天的文章未解決你的需求,可點(diǎn)擊獲取更多免費(fèi)教程。不要忘了在評(píng)論與我們分享您的想法和建議。
本文轉(zhuǎn)載自:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn