2

我在树视图中使用自定义子类 QFileSystemModel 以允许用户使用复选框选择文件夹。我的问题是映射的网络驱动器被列为硬盘驱动器,但我无法对其进行操作,所以我只想显示本地驱动器。如何强制 QFileSystemModel 仅显示本地驱动器?

4

2 回答 2

2

根据我从源代码和文档中了解到的信息,直接使用 QFileSystemModel 是不可能的。

我能想到的唯一可能的解决方法是使用带有重新定义 filterAcceptsRow() 或 filterAcceptsColumn() 或两者的 QSortFilterProxyModel 子类,我不确定哪一个,因为我没有使用 QFileSystemModel 并且不知道它认为列和什么行。然后,重新定义的方法可能会通过使用 data() 和 QFileSystemModel::FilePathRole 或使用 qobject_cast<> 并调用 QFileSystemModel::filePath() 来计算文件的路径。然后它会以某种方式找出驱动器的根路径并调用 GetDriveType() WinAPI 函数,因为 Qt 显然无法确定驱动器是否为网络驱动器。当然,这东西必须放在#ifdef Q_OS_WIN32.

这看起来很复杂,但我想不出其他办法。我也不确定 GetDriveType() 有多快,但如果存在性能问题,总是可以实现某种缓存。

于 2010-12-18T13:51:07.437 回答
0

仅对 QDir::Drives 使用 QFileSystemModel 过滤器怎么样。据我所知,这仅列出了本地硬盘驱动器。

于 2011-01-13T04:42:54.287 回答