首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFileSystemModel -增量更新/抢占更新

QFileSystemModel -增量更新/抢占更新
EN

Stack Overflow用户
提问于 2011-09-02 12:01:29
回答 1查看 2K关注 0票数 4

来自Qt文档:

在调用QFileSystemModel ()之前,setRootPath不会获取任何文件或目录。这将防止在此之前对文件系统进行任何不必要的查询,例如列出Windows上的驱动器。 与QDirModel(过时)不同,QFileSystemModel使用单独的线程来填充自己,因此在查询文件系统时不会导致主线程挂起。对rowCount()的调用将返回0,直到模型填充一个目录。QFileSystemModel保存一个带有文件信息的缓存。使用QFileSystemWatcher自动保持缓存的最新状态。

我使用的是QTreeView和一个子类QFileSystemModel,它使用可复选框。

如果在树中展开项之前调用QFileSystemModel::rowCount(index),则无论是否有任何子目录或文件,我都会收到“0”。但是,一旦展开,当再次调用时,将给出正确的行计数。

我认为如果您调用QFileSystemModel::setRootPath(),这将从指定的文件路径中获取数据,但在我在下面的代码中调用QFileSystemModel::rowCount之前,它似乎没有‘执行得足够快’(缓存没有更新)。

代码语言:javascript
复制
// 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);

}

在我试图计算包含在该文件夹中的多少项之前,我是否可以先发制人地收集子文件夹信息?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-02 12:59:26

QFileSystemModel发出directoryLoaded(const QString &path)信号,当收集线程完成加载目录。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7283102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档