2024
2019
这篇文章主要介绍事件与信号,以及更多的常见控件。
这个系列的摸索是在研究Qt Tutorial英文教程的基础上,克服在 macOS 上遇到的若干问题写下的记录。前面两篇我们还是在研究比较基础的模块,还没有涉及具体的 GUI 部分。从这篇开始我们来研究 GUI 开发。
跟着上一篇继续。本篇介绍 Qt 重新造的轮子:容器系统和文件操作系统。
我参考http://zetcode.com/gui/qt5/introduction/这个链接入坑,使用 macOS。网上看起来是 Windows 和 Linux 的教程居多,这个链接里的教程初看起来应该也是基于 Linux 的。谁让 Mac 的市场占有率低呢。
之前我们讨论了C++中将结构体放置在std::vector
容器内的操作风险。这里我们来进一步讨论如何处理在容器中存储的结构体数据。
抛开具体的编程语言场景,map 是一类非常基本的数据组织形式,其作用是将一个可 Hash 的值,映射到另一个值,而且一般来讲是一对一的(存在一对多的情况)。map 内部使用了红黑树,这棵树具有对数据自动排序的功能,使得对 map 的检索意义达到非常高的效率。基于键值的查找的复杂度是 Log(N)。
这里讲讲 C++标准库里面 map 的用法。
有一组长度不固定的参数需要传输,且参数形式为结构体,那么一个比较简单的方法是将这些参数作为一个std::vector
。例如
1 | void f(std::vector<struct ExampleStruct> data); |
由于 C++是采用值传递的方式,每次对std::vector
进行元素的存取操作时,都会对涉及的结构体进行复制。如果结构体的数量比较多,或者结构体的体积比加大,那么这种方式对于计算和内存资源的浪费就比较大了。