问题标签 [qfilesystemmodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
581 浏览

qt - 在 PySide 中使用 QFileSystemModel,从索引中获取项目

我寻找了这个答案,但在这里找不到任何东西,所以我问它。

使用命令功能QStandardModel从 获取项目是相当直接的。QModelIndexitemFromIndex

我有兴趣做基本相同的事情,但是对于我来说QFileSystemModel,是否有一种简单或直接的方式来做到这一点。在文档中看不到任何内容。

0 投票
1 回答
6192 浏览

qt - 文件通过另一个进程更改后如何刷新 QTreeView 中的 QFileSystemModel?

我有QTreeView一个QFileSystemModel作为模型的。文件和目录正确加载。

在我的应用程序工作流程中,不同的进程复制并覆盖文件系统上的文件。

但是,我QTreeView不会更新被覆盖文件的项目/行(例如:文件的大小和 lastModified 值不会更新为新值)。

使用文件路径,我可以获得一个FileInfo确实具有更新的 lastModified 值。但是,使用相同的路径来获取QModelIndex行的 lastModified 值会导致它返回旧值。

我尝试了一些事情(见下文)无济于事。

如果您知道如何解决此问题,请告诉我。非常感谢!:)

[编辑 - 添加步骤以模拟应用程序工作流程]

我认为以下是可以模仿该问题的步骤。

重现步骤:

  • 设置一个使用 QFileSystemModel 作为其模型的简单 QTreeView。

  • 将根路径设置为名为Root

  • 在目录Test.txt内创建一个文本文件Root

  • 加载应用程序并在其中观察目录中文件Test.txt上次修改日期Root

  • 保持此应用程序窗口打开。

  • 复制Test.txt不同的目录,比如说Temp

  • 修改文件并保存在Temp

  • 复制并替换 Test.txt以覆盖Root目录中的文件

  • 在应用程序窗口中观察最后修改日期

结果:上次修改日期未更新

添加了 SAPMLE:

0 投票
1 回答
924 浏览

sorting - 按列排序

我尝试做一些当然可以轻松完成的事情,但我可以找到方法。

我有一个 QtreeView 显示一个 QFileSystemModel,我用两个附加列(部分)进行了自定义。我使用按日期命名的目录 (YYYYMMDDHHMMSS+num)。字符串末尾的“num”是一个引用(整数,例如:04 或 12 或 53 ....),可以与其他目录名称类似。'num' 显示在第四列中。

我想对具有相似引用的所有目录进行分组(例如按升序排列),并按每个组中的名称(日期)对目录进行排序。

你能帮我一把吗?

文件夹如下所示:

代码 :

0 投票
0 回答
35 浏览

c++ - 如何在 Qt 的 TreeView 中查看任何文件?

目前,我有这个代码:

而且它只会让我查看通向文件正在运行的目录的目录,所以如果它正在运行c:/directory1/directory2,我无法查看c:/dir42,只有c:/directory1/directory2/

0 投票
1 回答
686 浏览

qt - Qt 异步显示与异步 QFileSystemModel

我正在尝试实现自定义文件资源管理器,它获取特定(内部文件系统)文件的元数据并显示所有这些数据以及文件。对于这个任务,我已经实现了自定义 QFileSystemModel 来处理这个问题。

现在,我知道 QFileSystemModel 中文件的加载是异步的,但显示不是。Qt 保持显示作业,直到所有文件都加载完毕。由于我在每个显示调用中都包含了元数据提取逻辑,因此它使包含超过 100 个文件的文件夹的显示速度非常慢(即使在缓存之后)。在整个这段时间内,显示被完全屏蔽。如何异步显示结果。准确地说是部分显示列表,然后在更新可用时刷新它。

文件通过 QTableView UI 小部件显示。

0 投票
1 回答
477 浏览

c++ - 如何更新 QFileSystemModel 中的文件权限

有没有办法在 QFileSystemModel (c++) 中更新文件的权限?在允许用户使用 qtreeview 重命名模型中列出的文件之前,我确保该文件已从源代码控制中签出。此时文件不再是只读的,但模型仍然认为它是只读的。如何在不丢失树的展开/折叠状态的情况下强制模型更新文件的权限?

谢谢!

更新:签出文件后,该文件已被标记为可写。不过,模型仍然没有意识到这一变化。

可以肯定的是,我继续使用

没有运气更改模型中该文件报告的权限。

更新:

注意:上述权限永远不会设置 QFile::WriteUser 标志,除非文件在模型创建之前是可写的。

0 投票
2 回答
1805 浏览

qt - QTreeView 和 QFileSystemModel 仅显示 USB 驱动器

我正在尝试编写一个对话框,允许用户从系统上找到的任何已安装的 USB 驱动器中进行选择。在 Windows 中,我绝对可以手动获取这些信息,使用对 GetLogicalDriveStrings 和 GetDriveType 的调用,因此我可以通过这种方式创建一个简单的列表。但用户还需要能够向下导航到任何一个 USB 驱动器,以选择要在其中写入文件的正确文件夹。我查看了 QFileSystemModel,但没有看到如何将其限制(过滤)为仅显示已安装的 USB 驱动器及其子文件夹/文件。有谁知道应该如何最好地使用 Qt 框架来完成这项工作?


更新 - 24 年 12 月 3 日:

docsteer,感谢您的建议。听起来是正确的方法。我实施了建议的更改,并且在我运行应用程序的大多数时候都发生了崩溃。它显示 C:,并等待一段时间,然后崩溃并显示错误代码 255。我认为这里有一些东西我没有正确连接,但还没有弄清楚。那些没有崩溃的时候,我仍然看到系统上可用驱动器的完整列表,包括我插入的两个 USB,而不仅仅是看到 USB。如果我更改 filesystemmodeldialog.cpp 中的第 42 行,以便传递“dir”而不是“usbModel”,则不会发生崩溃。你或任何人能在这里看到任何可能导致崩溃的东西吗,以及我创建的 USBDriveFilterProxyModel 的任何原因,哪个从所有已安装的驱动器中正确选择了两个 USB,无法过滤视图中的数据?我已经提供了我的小型测试应用程序中的所有文件,包括从 .ui 文件生成的标头,因此如果有人想运行它以查看发生了什么,他们可以。

主.cpp:

主窗口.cpp:

主窗口.cpp:

文件系统模型对话框.h:

文件系统模型对话框.cpp:

usbdrivefilter.h:

usbdrivefilter.cpp:

ui_filesystemmodelwidget.h:


更新 - 24 年 12 月 4 日:

所以我发现崩溃发生在 IconItemDelegate::sizeHint() 中,在 filesystemusbmodeldialog.cpp 文件中。运行到第 9 行:

并且在那一点上跨过会导致访问冲突。我假设这是因为我在 FileSystemUsbModelDialog 构造函数中将 IconFileSystemUsbModel 对象替换为 USBDriveFilterProxyModel 作为 QTreeView 模型。因此,我假设在 IconItemDelegate::sizeHint() 中转换 index.model() 是不正确的转换,并且我现在需要在调用 fileInfo() 之前获取原始源模型。所以我将 sizeHint() 重载更改为以下内容:

但这没有用。然后我发现一个链接似乎说我需要在我的视图上调用 setRootIndex(),现在代理代替了模型,所以我在我的 FileSystemUsbModelDialog 构造函数中添加了它,现在看起来像这样:

这没有用。我回到我的 IconItemUsbDelegate::sizeHint() 并将其改回,认为也许在视图上设置 root 是我真正需要做的,但没有运气。

有什么想法吗?

0 投票
1 回答
486 浏览

c++ - 在启动时使用 QFileSystemModel 滚动到 QTreeView 中的文件

过去几个小时我一直在阅读,但没有找到一个很好的解决方案来解决看似简单的常见问题。我有一个带有 QFileSystemModel 的 QTreeView。我想将当前索引设置为用户保存的最后一个文件并滚动到该位置。因为 qfilesystemmodel 以异步方式加载,如果我立即使用函数 scrollTo(mydesiredindex),如下所示:

qtreeview 滚动到文件的当前位置,然后在它之前添加更多文件,以便将 mydesiredindex 推到视图之外。

我试图获得模型完成填充树视图的信号,但无济于事。信号 directoryLoaded(const QString &) 和 rowsInserted(const QModelIndex &, int, int)) 在模型完成填充之前发出信号。

感谢任何人的帮助。

0 投票
2 回答
2450 浏览

c++ - QFileSystemModel 自定义图标?

在我的项目中,我有一个 QTreeView 在我的驱动器上显示一个位置。我需要将文件的所有图标更改为自定义图标,但保留文件夹。

我重新实现了 QFileSystemModel 并且能够更改所有图标。有什么方法可以将更改限制为仅文件而不是文件夹?

这个:

在此处输入图像描述

变成:

在此处输入图像描述

我怎样才能只更改文件的图标?

谢谢你的时间 :)

0 投票
1 回答
759 浏览

python - 如何删除 QFileSystemModel 中修改的大小、类型、日期?

我使用QFileSystemModel,但我只想在 中显示树目录QTreeView。我不想显示大小、类型和修改日期。

在此处输入图像描述

这是我的代码: