QFileSystemModel和QFileSystemWatcher从磁盘中删除

时间:2011-08-13 17:16:28

标签: qt qfilesystemmodel

我有一个QTreeView,它通过重新实现QFileSystemModel来填充。据我所知,QFileSystemModel在rootPath上安装了一个QFileSystemWatcher。我正在尝试做的是在我的程序中通知在rootPath上直接删除文件,但我没有找到任何重新实现的信号,它提供了我的信息。

我的应用程序通过ftp连接上传一些文件,当文件完全上传后我将其从该位置删除,所以我想要在文件被直接删除时重新实现QFileSystemModel的通知(不是从remove方法或其他东西相似)。

我希望你能帮助我。我在网上搜索过很多但我找不到任何东西。

干杯。

1 个答案:

答案 0 :(得分:2)

您可以使用FileSystemModel的{​​{3}}信号(继承自rowsAboutToBeRemoved)。

只要从模型中删除行,就会触发它。 parentstartend参数允许您访问文件名(在子项的第0列中)。

示例代码:

// once you have your model set up:
...
QObject::connect(model, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int)),
         receiver, SLOT(toBeRemoved(const QModelIndex&, int, int)));
...
// in receiver class:
public slots:
 void toBeRemoved(const QModelIndex &parent, int start, int end) {
  std::cout << start << " -> " << end << std::endl;
  std::cout << parent.child(start, 0).data().typeName() << std::endl;
  std::cout << qPrintable(parent.child(start, 0).data().toString()) << std::endl;
 }

(使用std :: cout不是Qt的好习惯,我想,这只是为了让你开始。)

来自QAbstractItemModel的其他aboutToBe...信号可用于文件系统上发生的其他事件。