问题标签 [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.
qt - 在 PySide 中使用 QFileSystemModel,从索引中获取项目
我寻找了这个答案,但在这里找不到任何东西,所以我问它。
使用命令功能QStandardModel
从 获取项目是相当直接的。QModelIndex
itemFromIndex
我有兴趣做基本相同的事情,但是对于我来说QFileSystemModel
,是否有一种简单或直接的方式来做到这一点。在文档中看不到任何内容。
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:
sorting - 按列排序
我尝试做一些当然可以轻松完成的事情,但我可以找到方法。
我有一个 QtreeView 显示一个 QFileSystemModel,我用两个附加列(部分)进行了自定义。我使用按日期命名的目录 (YYYYMMDDHHMMSS+num)。字符串末尾的“num”是一个引用(整数,例如:04 或 12 或 53 ....),可以与其他目录名称类似。'num' 显示在第四列中。
我想对具有相似引用的所有目录进行分组(例如按升序排列),并按每个组中的名称(日期)对目录进行排序。
你能帮我一把吗?
文件夹如下所示:
代码 :
c++ - 如何在 Qt 的 TreeView 中查看任何文件?
目前,我有这个代码:
而且它只会让我查看通向文件正在运行的目录的目录,所以如果它正在运行c:/directory1/directory2
,我无法查看c:/dir42
,只有c:/directory1/directory2/
qt - Qt 异步显示与异步 QFileSystemModel
我正在尝试实现自定义文件资源管理器,它获取特定(内部文件系统)文件的元数据并显示所有这些数据以及文件。对于这个任务,我已经实现了自定义 QFileSystemModel 来处理这个问题。
现在,我知道 QFileSystemModel 中文件的加载是异步的,但显示不是。Qt 保持显示作业,直到所有文件都加载完毕。由于我在每个显示调用中都包含了元数据提取逻辑,因此它使包含超过 100 个文件的文件夹的显示速度非常慢(即使在缓存之后)。在整个这段时间内,显示被完全屏蔽。如何异步显示结果。准确地说是部分显示列表,然后在更新可用时刷新它。
文件通过 QTableView UI 小部件显示。
c++ - 如何更新 QFileSystemModel 中的文件权限
有没有办法在 QFileSystemModel (c++) 中更新文件的权限?在允许用户使用 qtreeview 重命名模型中列出的文件之前,我确保该文件已从源代码控制中签出。此时文件不再是只读的,但模型仍然认为它是只读的。如何在不丢失树的展开/折叠状态的情况下强制模型更新文件的权限?
谢谢!
更新:签出文件后,该文件已被标记为可写。不过,模型仍然没有意识到这一变化。
可以肯定的是,我继续使用
没有运气更改模型中该文件报告的权限。
更新:
注意:上述权限永远不会设置 QFile::WriteUser 标志,除非文件在模型创建之前是可写的。
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 是我真正需要做的,但没有运气。
有什么想法吗?
c++ - 在启动时使用 QFileSystemModel 滚动到 QTreeView 中的文件
过去几个小时我一直在阅读,但没有找到一个很好的解决方案来解决看似简单的常见问题。我有一个带有 QFileSystemModel 的 QTreeView。我想将当前索引设置为用户保存的最后一个文件并滚动到该位置。因为 qfilesystemmodel 以异步方式加载,如果我立即使用函数 scrollTo(mydesiredindex),如下所示:
qtreeview 滚动到文件的当前位置,然后在它之前添加更多文件,以便将 mydesiredindex 推到视图之外。
我试图获得模型完成填充树视图的信号,但无济于事。信号 directoryLoaded(const QString &) 和 rowsInserted(const QModelIndex &, int, int)) 在模型完成填充之前发出信号。
感谢任何人的帮助。
c++ - QFileSystemModel 自定义图标?
在我的项目中,我有一个 QTreeView 在我的驱动器上显示一个位置。我需要将文件的所有图标更改为自定义图标,但保留文件夹。
我重新实现了 QFileSystemModel 并且能够更改所有图标。有什么方法可以将更改限制为仅文件而不是文件夹?
这个:
变成:
我怎样才能只更改文件的图标?
谢谢你的时间 :)
python - 如何删除 QFileSystemModel 中修改的大小、类型、日期?
我使用QFileSystemModel
,但我只想在 中显示树目录QTreeView
。我不想显示大小、类型和修改日期。
这是我的代码: