来自Qt文档:
在调用QFileSystemModel ()之前,setRootPath不会获取任何文件或目录。这将防止在此之前对文件系统进行任何不必要的查询,例如列出Windows上的驱动器。 与QDirModel(过时)不同,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);
}在我试图计算包含在该文件夹中的多少项之前,我是否可以先发制人地收集子文件夹信息?
谢谢
发布于 2011-09-02 12:59:26
QFileSystemModel发出directoryLoaded(const QString &path)信号,当收集线程完成加载目录。
https://stackoverflow.com/questions/7283102
复制相似问题