如何在QT中从QFileSystemModel中排除映射的网络驱动器?

时间:2010-12-18 12:19:47

标签: qt4 mapped-drive qfilesystemmodel

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

2 个答案:

答案 0 :(得分:2)

从我从源和文档中可以看出,不可能直接使用QFileSystemModel。

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

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

答案 1 :(得分:0)

如何将QFileSystemModel过滤器仅用于QDir :: Drives。据我所知,这仅列出了本地硬盘。