QT容器很香之QList
時(shí)間:2021-08-19 15:10:54
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀][導(dǎo)讀]大家好,我是逸珺。今天來(lái)聊一下QList,QList是一種QT容器,如果能熟練使用它,會(huì)非常香。什么是QListQList是QT中通用容器類,它將對(duì)象存儲(chǔ)在一個(gè)表中,該表提供基于索引的快速訪問(wèn)和基于索引的插入和刪除。熟悉C標(biāo)準(zhǔn)庫(kù)的話,就類似于std:list,為什么這里描...
[導(dǎo)讀] 大家好,我是逸珺。今天來(lái)聊一下QList,QList 是一種QT容器,如果能熟練使用它,會(huì)非常香。什么是QList
QList 是QT中通用容器類,它將對(duì)象存儲(chǔ)在一個(gè)表中,該表提供基于索引的快速訪問(wèn)和基于索引的插入和刪除。熟悉C 標(biāo)準(zhǔn)庫(kù)的話,就類似于std:list ,為什么這里描述是跟了一個(gè)呢?因?yàn)槭侨萜黝?,所謂容器,就把它想象成一個(gè)能裝東西的框,但是這與現(xiàn)實(shí)生活中的框還是有區(qū)別的,現(xiàn)實(shí)中的框可以隨便往里面裝東西,先裝幾個(gè)土豆,再放兩顆白菜,再放一本書(shū)....,隨便裝,只要放的下。但是,這個(gè)容器類跟的這個(gè),是指泛型,從字面意思上看,好像也是什么對(duì)象都可以往里面放,但是這么幾層需要理解:,這里T是t_measure:
什么是QList
QList- 對(duì)于特定的容器,需要指明其可裝進(jìn)去的對(duì)象類型
- 對(duì)于特定的容器,只能裝指定的類型
QList<float>?m_list1;
QList<int>??m_list2;
m_list1可以存float型的對(duì)象,而m_list2則可以裝int型對(duì)象。這是怎么做到的呢,是C 編譯器在編譯期根據(jù)T本身類型編譯綁定的。前面說(shuō)QList是基于索引插入和刪除的容器類,何以見(jiàn)得呢?來(lái)看看QT官方文檔例子:QList?list?=?{?"one",?"two",?"three"?};
這意味著這三個(gè)元素是這樣放的:實(shí)戰(zhàn)例子
假設(shè)有這么一個(gè)需求,利用一個(gè)socket接收一個(gè)設(shè)備的計(jì)算數(shù)據(jù),每一個(gè)計(jì)算數(shù)據(jù)是這樣的:typedef?struct?_t_measure {
??qint64?addr;
??qint64?Real;
??qint64?Imag;
??qint64?rms;
}t_measure;
在類中加入QListQList?m_measure;
一個(gè)報(bào)文里面有多個(gè)測(cè)量結(jié)果,QT寫(xiě)的應(yīng)用程序,需要一邊收一邊顯示或者存儲(chǔ),接收可能是一個(gè)線程,或者sokect消息回調(diào)函數(shù),比如是UDP接收的:connect(m_MeasureUdpSocket,?SIGNAL(readyRead()),
????????this,?SLOT(readMeasurement()));
接收函數(shù):#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?*)