【问题标题】:QFileSystemModel and QFileSystemWatcher delete from diskQFileSystemModel 和 QFileSystemWatcher 从磁盘中删除
【发布时间】:2011-08-14 01:49:41
【问题描述】:

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

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

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

干杯。

【问题讨论】:

    标签: qt qfilesystemmodel


    【解决方案1】:

    您可以使用FileSystemModelrowsAboutToBeRemoved 信号(继承自QAbstractItemModel)。

    每当从模型中删除一行时都会触发它。 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;
     }
    

    (我认为在 Qt 中使用 std::cout 并不是一个好习惯,这只是为了让您入门。)

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

    【讨论】:

    • 感谢它的工作!我在参考资料上阅读了该功能,但Qt Creator IDE(我不知道为什么)没有建议(包括这个)一些信号,所以这就是我之前没有尝试过的原因。再次感谢。