【发布时间】:2011-12-10 23:24:19
【问题描述】:
来自 Qt 文档:
在调用 setRootPath() 之前,QFileSystemModel 不会获取任何文件或目录。这将防止在此之前对文件系统进行任何不必要的查询,例如在 Windows 上列出驱动器。
与 QDirModel(obsolete) 不同,QFileSystemModel 使用单独的线程来填充自身,因此在查询文件系统时不会导致主线程挂起。对 rowCount() 的调用将返回 0,直到模型填充目录。 QFileSystemModel 保存一个包含文件信息的缓存。缓存使用 QFileSystemWatcher 自动保持最新。
我将 QTreeView 与使用复选框的子类 QFileSystemModel 一起使用。
如果我在树中展开某个项目之前调用QFileSystemModel::rowCount(index),我将收到“0”,无论是否有任何子目录或文件。但是,一旦它被扩展,当再次调用时就会给出正确的行数。
我认为如果您调用 QFileSystemModel::setRootPath() 这将从指定的文件路径获取数据,但在我调用 QFileSystemModel::rowCount 之前它似乎没有“执行得足够快”(缓存未更新)在我下面的代码中。
// Whenever a checkbox in the TreeView is clicked
bool MyModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
if (role == Qt::CheckStateRole)
{
if (value == Qt::Checked)
{
setRootPath(this->filePath(index));
checklist.insert(index);
set_children(index);
}
else
{
checklist.remove(index);
unchecklist->insert(index);
}
emit dataChanged(index, index);
return true;
}
return QFileSystemModel::setData(index, value, role);
}
// Counts how many items/children the node has (i.e. file/folders)
void MyModel::set_children(const QModelIndex& index)
{
int row = this->rowCount(index);
qDebug() << QString::number(row);
}
在我尝试计算该文件夹中包含的项目数量之前,我是否可以预先收集子文件夹信息?
谢谢
【问题讨论】:
标签: c++ qt qfilesystemmodel