2

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

我的应用程序通过 ftp 连接上传了一些文件,当文件完全上传后,我将其从该位置删除,因此当文件被直接删除(而不是从删除方法或类似方法)时,我希望从重新实现 QFileSystemModel 获得通知。

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

干杯。

4

1 回答 1

3

您可以使用FileSystemModel'rowsAboutToBeRemoved信号(继承自QAbstractItemModel)。

每当从模型中删除一行时都会触发它。和参数允许您获取文件名(在子项的第 0 列中parentstartend

示例代码:

// 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;
 }

(我认为在 Qt 中使用 std::cout 并不是很好的做法,这只是为了让您入门。)

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

于 2011-08-13T17:49:41.173 回答