首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFileSystemModel不发射fileRenamed信号

QFileSystemModel不发射fileRenamed信号
EN

Stack Overflow用户
提问于 2022-04-21 17:49:51
回答 1查看 76关注 0票数 1

我试图使用QFileSystemModel查看目录中的更改。每当我在根路径中重命名文件时,只发出directoryLoaded()信号。我希望发出fileRenamed()信号,以便知道哪个文件被重命名为新名称。这是我的代码:

代码语言:javascript
复制
model = new QFileSystemModel;
model->setRootPath("C:/test/");
QObject::connect(model, SIGNAL(fileRenamed(const QString&, const QString&, const QString&)), this, SLOT(updateRename()));
QObject::connect(model, SIGNAL(directoryLoaded(const QString&)), this, SLOT(loadDir()));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-21 20:41:09

恐怕您对这个QFileSystemModel类期望太高了。如果重命名操作发生在模型之外,则不会也不能捕获。我查找了fileRenamed()信号的所有用途,似乎发出信号的唯一地方是这里:https://code.woboq.org/qt5/qtbase/src/widgets/dialogs/qfilesystemmodel.cpp.html#933

如果您在上面几行,您可以看到这是在这个函数https://code.woboq.org/qt5/qtbase/src/widgets/dialogs/qfilesystemmodel.cpp.html#873内发生重命名时触发的--换句话说,如果您使用QFileSystemModel::setData()为一个项目设置名称,它将重命名该项并发出信号。这是唯一能发出信号的方法。

这是合乎逻辑的,如果重命名发生在程序之外,那么就没有特定的方法来发现某个文件被重命名了。您的应用程序只注意到某个文件消失了,出现了另一个具有不同名称的文件。当然,您可以检查文件的时间戳和大小是否相同,它们是否也位于同一个父文件夹中,也可以检查文件内容.只有当这些内容匹配并且唯一的区别是文件名时,您才能得出文件被重命名的结论。但这是你必须自己编程的东西。QFileSystemModel不会为你做这件事,因为它不知道你的具体意图。

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

https://stackoverflow.com/questions/71958824

复制
相关文章

相似问题

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