C++ QFileSystemModel-增量更新/先发制人更新

C++ QFileSystemModel-增量更新/先发制人更新,c++,qt,qfilesystemmodel,C++,Qt,Qfilesystemmodel,从Qt文档中: QFileSystemModel在调用setRootPath()之前不会获取任何文件或目录。这将防止在文件系统上进行任何不必要的查询,直到该点,例如列出Windows上的驱动器 与QDirModel(过时)不同,QFileSystemModel使用单独的线程来填充自身,因此在查询文件系统时不会导致主线程挂起。在模型填充目录之前,对rowCount()的调用将返回0。QFileSystemModel保留一个包含文件信息的缓存。缓存使用QFileSystemWatcher自动保持最新

从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);

}
//每当单击树视图中的复选框时
bool MyModel::setData(常量QModelIndex和index、常量QVariant和value、int角色)
{
如果(角色==Qt::CheckStateRole)
{
如果(值==Qt::选中)
{
setRootPath(此->文件路径(索引));
检查表。插入(索引);
设置子项(索引);
}
其他的
{
检查表。删除(索引);
取消选中列表->插入(索引);
}
发出数据更改(索引,索引);
返回true;
}
返回QFileSystemModel::setData(索引、值、角色);
}
//统计节点有多少项/子项(即文件/文件夹)
void MyModel::set_子项(常量QModelIndex和索引)
{
int row=this->rowCount(索引);

qDebug()QFileSystemModel在收集线程完成加载目录时发出信号。

链接已断开。是否可以停止
QFileSystemModel
更新?