刚好今天在使用QFile的时候,需要做一个获取本地的文件夹名称,在这里我使用的代码如下所示:
- QDir folder(ui->lineEdit_7->text()); // 当前文件夹
- QStringList filters;
- filters << "*.*/"; // 文件夹过滤器,包括子文件夹
- QList
directories = folder.entryInfoList(); - for (const QFileInfo& dir : directories) {
- qDebug() <<"文件夹名称" <
fileName(); // 输出每个文件夹的路径 - }
于是我就思考想弄一哈QList和QStringList它们两个之间的对比。
QList和QStringList都是Qt库中的类,它们的主要区别在于用途和功能。
QList是一个通用、高效的列表类,它提供了对列表的基本操作,如添加、删除、查找等。它是一个模板类,可以存储任意类型的对象,如整数、浮点数、字符串等。QList的主要优点是它的通用性和高效性,它适用于各种不同的数据类型和需求。
另外C++里面也有类似的通用容器,叫vector,这个两者之间的区别是:
QList和C++中的vector在功能上有些相似,它们都是动态数组,可以动态地添加和删除元素。但是,它们之间也存在一些区别:
总的来说,QList和vector都是动态数组,但它们在内存管理、函数接口和性能方面存在一些区别。选择使用QList还是vector取决于具体的需求和情况。
其中,QList的自动内存管理机制是通过Qt的内存管理机制来实现的。Qt使用一种称为"对象树"的内存管理策略,其中每个对象都有一个父对象,当一个对象不再需要时,它的父对象会负责释放它的内存。
对于QList来说,它的每个元素都是一个动态分配的对象,当QList被销毁时,它会自动释放所有元素的内存。这是通过在QList的析构函数中调用元素对象的delete操作符来实现的。
另外,QList还使用了一个内存池机制来优化内存分配。每次调用QList的append()函数时,它都会将新元素存储在一个内存池中,而不是直接分配新的内存。当内存池达到一定大小后,QList会一次性释放整个内存池的内存,这样可以减少内存分配和释放的开销,提高性能。
QStringList是一个专门用于处理字符串的列表类,它是QString的子类。它继承了QString的所有功能,并提供了额外的操作,如合并字符串、拆分字符串、根据索引查找字符串等。QStringList的主要优点是它的字符串处理功能,它使得处理字符串变得更加方便和高效。