首页 > 编程知识 正文

使用QT必须要用链表吗,QT容器

时间:2023-05-05 09:30:54 阅读:35808 作者:2775

[导读]你好,我是逸珺。

今天谈谈QList吧。 QList是QT容器。 如果能熟练使用那个的话,会很香。

QListT QListT是QT中的通用容器类,用于将对象存储在提供基于索引的快速访问和基于索引的插入和删除的表中。 c熟悉标准库就像std:listT,为什么这里有t呢? 因为是容器类,所以容器被认为是可以放东西的框架。 但是,这和现实生活的框架还是不同的。 现实的框架可以自由地把东西放在里面。 放几个土豆,然后放两个白菜,放一本书…,随便放,放就行了。

但是,这个带有这个容器类的t,从总的意义上来说,正如文字所示,以前任何对象都可以放入,但这样的层需要理解。

对于特定容器,必须指定该容器可以容纳的对象类型

特定容器只能包含指定的类型

那么,为什么通用呢? 这意味着不同的QList对象可以安装不同类型的对象,具体取决于指定的t类型。 例如,情况如下:

QListfloatm_list1; QListintm_list2; m_list1可以包含浮动类型的对象,而m_list2可以包含int类型的对象。 这怎么能做到呢,是c编译器在编译期根据t自己的类型进行编译绑定的。

之前我说过QList是基于插入和删除索引的容器类,我怎么知道? 让我们看一下QT官方文档的示例:

QListQStringlist={'one '、' two '、' three'}; 也就是说,这三个要素是这样放置的:

实战示例假设有一个套接字接收一个设备的计算数据的需求。 各计算数据如下所示。

typedef struct _ t _ measure { qint 64 addr; qint 64实际; qint64Imag; qint64rms; }t_measure; 将QListT添加到类中。 其中t是t_measure :

QListt_measurem_measure; 一条消息包含多个测量结果。 用QT编写的APP应用程序必须在接收的同时查看或存储。 接收可能是一个线程,如UDP接收到的,也可能是sokect消息回调函数:

连接(m _ measureudpsocket,信号(ready read ()、this、slot ) readmeasurement ) ); 接收函数:

#definemax_buf_size(300 ) definemax _ buf _ size _ bytes (max _ buf _ size *8) void measurement 33603360 rea surer }u_buf; u_bufbuffer; t_measure*pRaw=nullptr; intlen=0while (m _ measureudpsocket-haspendingdatagrams () len=m _ measureudpsocket-pendingdatagramsize ); if(lenmax_buf_size_bytes ) len=MAX_BUF_SIZE_BYTES; m _ measureudpsocket-read datagram (buffer.buf,len ); if(buffer.dpts(0)==0x7FAAAAF7ccccccccc ) ) praw=(t_measure* ) buffer.dpts )2); for(inti=0; ibuffer.dpts[1]; I ) m_measure.append(*praw; pRaw; } }假设头部标识为0x7FAAAAF7CCCCCCCC,定义头部正确,并根据长度继续将接收到的数据添加到表的末尾。

在其他地方,可以从头部检索数据并进行后续处理,例如,计算、查看和保存

if(m_measure.isempty () ) {return; }intpts=m_measure.size (; t_measuretemp; for(inti=0; ipts; I ) {temp=m_measure.takeFirst (; //进行后续处理……上述例子,用形象来说明,大致如下。

接收端不断添加到尾部,处理端取出到头部,是FIFO操作。

在不使用QListT的情况下,自己实现FIFO需要考虑很多细节问题,所以要么使用c,要么QT尽量摆脱c语言的编程习惯,尽量使用现有的车轮,这将大大提高工作效率。

使用c可以大大提高效率,而无需熟悉通用编程方法(即容器)并自行管理这些底层实现。 我觉得很香,你觉得呢?

—— The End——

我建议你点击蓝色字体跳

使用FreeRTOS需要很好地理解任务状态机吗?

手把手地教你用STM32F4跑自由RTOS

任务管理器的基本框架,图解了FreeRTOS的原理系列

傅立叶变换、拉普拉斯变换、z变换的联系是什么? 为什么要转换?

转发、留言、点赞、分享欢迎您的朋友。 谢谢您的支持。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。