在集合中存储多个 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/