c++ - 将 QFiles 正确地存储在一个集合中

标签 c++ qt qfile

在集合中存储多个 QFile 的最佳方式是什么?最好使用 QList、数组或 vector 吗?

我想以 QFile 而不是 QFile* 的形式访问集合的元素。

我正在尝试读取 Qt 中的一个目录并将所有文件存储在一个集合中。然后将所有文件名打印到屏幕上。

我是如何阅读目录的:

QDirIterator it(p_dir, QStringList() << "*.wav", QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext())
{
    // Put file into collection
}

目前我正在使用 QList 来存储 QFiles:

QList<QFile*> list;

我读到获取文件信息的最佳方法是使用 QFileInfo 类型。如何将 QFileInfo 文件设置为列表中的元素?

我想做这样的事情:

QFileInfo info;
QListIterator<QFile*> i(list);
while(i.hasNext()) 
{
    info.setFile(i);
}

但是上面给了我: 错误:没有匹配函数来调用 'QFileInfo::setFile(QListIterator&)' fi.setFile(i);

最佳答案

牢记QFile继承QObject ,因此不可复制或移动。通常的做法是将指向此类对象的指针而不是对象本身存储在容器中。至于使用哪个容器其实并不重要,但是QVector将是最有效的。

QListIterator是 Java 风格的迭代器。所以:

QListIterator::QListIterator(const QList<T> & list)

Constructs an iterator for traversing list. The iterator is set to be at the front of the list (before the first item).

迭代器不指向任何东西,如果你想得到实际的对象,使用i.next()给你一个QFile*然后你将不得不取消引用,因为 setFile()接受 QFile & , 不是 QFile * .

关于c++ - 将 QFiles 正确地存储在一个集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36391586/

相关文章:

c++ - 我可以安全地将 std::string 用于 C++11 中的二进制数据吗?

c++ - 我要删除对象还是仅删除其指针

c++ - Qt 应用程序从 QtCreator 启动时会找到库,但不能从命令行启动

c++ - 检测标准输入是终端还是管道?

c++ - 如何在 Qt 应用程序中处理纯正则表达式结果?

c++ - 如何在 Qt 5 中写入和读取 QResource 文件?

c++ - 独占打开文件/锁定文件

c++ - QT - QFile 复制操作极其缓慢

c++ - 错误 LNK2005 : "int __cdecl number(void)" (? number@@YAHXZ) 已经在 functions.obj 中定义

c++ - 为什么 C++ 的 NULL 通常是整数文字而不是像 C 中的指针?