来自 Qt 文档:
在调用 setRootPath() 之前,QFileSystemModel 不会获取任何文件或目录。这将防止在文件系统上进行任何不必要的查询,直到此时,例如在 Windows 上列出驱动器。
与 QDirModel(obsolete) 不同,QFileSystemModel 使用单独的线程来填充自身,因此在查询文件系统时不会导致主线程挂起。在模型填充目录之前,对 rowCount() 的调用将返回 0。QFileSystemModel 保存一个包含文件信息的缓存。缓存使用 QFileSystemWatcher 自动保持最新。
我将 QTreeView 与使用复选框的子类 QFileSystemModel 一起使用。
如果我QFileSystemModel::rowCount(index)
在树中的项目展开之前调用,无论是否有任何子目录或文件,我都会收到“0”。然而,一旦它被扩展,当再次调用时就会给出正确的行数。
QFileSystemModel::rowCount
我认为如果您调用 QFileSystemModel::setRootPath() 这将从指定的文件路径中获取数据,但在我调用下面的代码之前它似乎没有“执行得足够快”(缓存未更新) 。
// 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);
}
在我尝试计算该文件夹中包含多少项目之前,有没有办法可以先发制人地收集子文件夹信息?
谢谢