QT容器很香之QList
时间:2021-08-19 15:10:54
手机看文章
扫描二维码
随时随地手机看文章
[导读][导读]大家好,我是逸珺。今天来聊一下QList,QList是一种QT容器,如果能熟练使用它,会非常香。什么是QListQList是QT中通用容器类,它将对象存储在一个表中,该表提供基于索引的快速访问和基于索引的插入和删除。熟悉C标准库的话,就类似于std:list,为什么这里描...
[导读] 大家好,我是逸珺。今天来聊一下QList,QList 是一种QT容器,如果能熟练使用它,会非常香。什么是QList
QList 是QT中通用容器类,它将对象存储在一个表中,该表提供基于索引的快速访问和基于索引的插入和删除。熟悉C 标准库的话,就类似于std:list ,为什么这里描述是跟了一个呢?因为是容器类,所谓容器,就把它想象成一个能装东西的框,但是这与现实生活中的框还是有区别的,现实中的框可以随便往里面装东西,先装几个土豆,再放两颗白菜,再放一本书....,随便装,只要放的下。但是,这个容器类跟的这个,是指泛型,从字面意思上看,好像也是什么对象都可以往里面放,但是这么几层需要理解:,这里T是t_measure:
什么是QList
QList- 对于特定的容器,需要指明其可装进去的对象类型
- 对于特定的容器,只能装指定的类型
QList<float> m_list1;
QList<int> m_list2;
m_list1可以存float型的对象,而m_list2则可以装int型对象。这是怎么做到的呢,是C 编译器在编译期根据T本身类型编译绑定的。前面说QList是基于索引插入和删除的容器类,何以见得呢?来看看QT官方文档例子:QList list = { "one", "two", "three" };
这意味着这三个元素是这样放的:实战例子
假设有这么一个需求,利用一个socket接收一个设备的计算数据,每一个计算数据是这样的:typedef struct _t_measure {
qint64 addr;
qint64 Real;
qint64 Imag;
qint64 rms;
}t_measure;
在类中加入QListQList 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 *)