我遇到了QFileSystemModel不显示文件更改的问题。第一次创建文件时,它会立即显示出来。但是当文件本身发生变化时,大小和时间戳不会更新。我曾多次尝试强制模型更新,但都没有成功。我所做的最好的就是完全替换这个模型。虽然这会导致此错误:
QSortFilterProxyModel: index from wrong model passed to mapToSource
下面的测试代码创建空目录的表视图。左键创建一个文件(食品.txt)单击时。连续单击将数据追加到文件。我的理解是QFileSystemModel不需要刷新,但是第二个按钮是我的尝试。在
如果你能帮助我做错事,我将不胜感激!在
^{pr2}$
由于qtv5.9.4可以设置环境变量
QT_FILESYSTEMMODEL_WATCH_FILES
,因此可以在changelog中阅读更多关于它的信息:有几件事:
更新:
从Qt-5.9.4开始,
QT_FILESYSTEMMODEL_WATCH_FILES
环境变量可用于打开每个文件监视(请参见QTBUG-46684)。在模型开始缓存有关文件的信息之前,需要将该值设置为非空值。但请注意,这将为遇到的每个文件添加一个文件监视程序,因此这可能使其成为expensive solution on some systems。在原始答案留在下面作为对问题的解释。在
此问题是由长期存在的Qt错误引起的:QTBUG-2276。不幸的是,目前看来不太可能很快修复。正如bug报告评论中指出的,问题的核心似乎是:
唯一真正的解决方法是将
QFileSystemWatcher
附加到每个文件上,这显然可以是prohibitively expensive(无论如何,在某些平台上)。在除了这个问题之外,QFileSystemModel类目前还没有提供用于强制刷新的API,而且,正如您所发现的,似乎没有任何可靠的解决方法。在SO和其他地方提供的大多数“解决方案”都提出了一些变体:
但正如您所知,这似乎只起一次作用-可能是由于当前实现文件信息缓存的方式有些古怪。在
目前看来,强制更新的唯一方法是替换整个模型。通过重构您的
^{pr2}$init_model
方法,可以防止当前实现产生的错误消息,如下所示:这是一个非常令人不满意的情况,但目前似乎没有任何明显的办法来解决它。在
相关问题 更多 >
编程相关推荐