www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式客棧
[導讀][導讀]大家好,我是逸珺。今天來聊一下QList,QList是一種QT容器,如果能熟練使用它,會非常香。什么是QListQList是QT中通用容器類,它將對象存儲在一個表中,該表提供基于索引的快速訪問和基于索引的插入和刪除。熟悉C標準庫的話,就類似于std:list,為什么這里描...

[導讀] 大家好,我是逸珺。

今天來聊一下QList,QList 是一種QT容器,如果能熟練使用它,會非常香。

什么是QList

QList 是QT中通用容器類,它將對象存儲在一個表中,該表提供基于索引的快速訪問和基于索引的插入和刪除。熟悉C 標準庫的話,就類似于std:list ,為什么這里描述是跟了一個呢?因為是容器類,所謂容器,就把它想象成一個能裝東西的框,但是這與現實生活中的框還是有區(qū)別的,現實中的框可以隨便往里面裝東西,先裝幾個土豆,再放兩顆白菜,再放一本書....,隨便裝,只要放的下。

但是,這個容器類跟的這個,是指泛型,從字面意思上看,好像也是什么對象都可以往里面放,但是這么幾層需要理解:

  • 對于特定的容器,需要指明其可裝進去的對象類型
  • 對于特定的容器,只能裝指定的類型
那么,為什么又說是泛型呢?就是說不同的QList對象,根據所指定的T的類型,可以裝各自不同類型的對象,比如:

QList<float>?m_list1;
QList<int>??m_list2;
m_list1可以存float型的對象,而m_list2則可以裝int型對象。這是怎么做到的呢,是C 編譯器在編譯期根據T本身類型編譯綁定的。

前面說QList是基于索引插入和刪除的容器類,何以見得呢?來看看QT官方文檔例子:

QList?list?=?{?"one",?"two",?"three"?};
這意味著這三個元素是這樣放的:

實戰(zhàn)例子

假設有這么一個需求,利用一個socket接收一個設備的計算數據,每一個計算數據是這樣的:

typedef?struct?_t_measure {
??qint64?addr;
??qint64?Real;
??qint64?Imag;
??qint64?rms;
}t_measure;
在類中加入QList,這里T是t_measure:

QList?m_measure;
一個報文里面有多個測量結果,QT寫的應用程序,需要一邊收一邊顯示或者存儲,接收可能是一個線程,或者sokect消息回調函數,比如是UDP接收的:

connect(m_MeasureUdpSocket,?SIGNAL(readyRead()),
????????this,?SLOT(readMeasurement()));
接收函數:

#define?MAX_BUF_SIZE????????(300)
#define?MAX_BUF_SIZE_BYTES??(MAX_BUF_SIZE*8)
void?Measurement::readMeasurement()
{
??typedef?union?_u_buf?{
????char??buf[MAX_BUF_SIZE_BYTES];
????qint64?dpts[MAX_BUF_SIZE];
??}u_buf;

??u_buf?buffer;
??t_measure?*pRaw=nullptr;
??int?len?=?0;
??while?(m_MeasureUdpSocket->hasPendingDatagrams())?{
????len?=?m_MeasureUdpSocket->pendingDatagramSize();
????if(len>MAX_BUF_SIZE_BYTES)
???????len?=?MAX_BUF_SIZE_BYTES;
??????
????m_MeasureUdpSocket->readDatagram(buffer.buf,?len);
????if(buffer.dpts[0]==0x7FAAAAF7CCCCCCCC)?{
??????pRaw?=?(t_measure?*)
本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
關閉
關閉