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

Qt4 如何从QT中的QFileSystemModel中排除映射的网络驱动器?,qt4,mapped-drive,qfilesystemmodel,Qt4,Mapped Drive,Qfilesystemmodel,我在树状视图中使用自定义子类QFileSystemModel,允许用户使用复选框选择文件夹。我的问题是,映射的网络驱动器列为硬盘驱动器,但我无法对其进行操作,因此我只想显示本地驱动器。如何强制QFileSystemModel仅显示本地驱动器?根据我从源代码和文档中了解到的情况,直接使用QFileSystemModel是不可能的 我能想到的唯一可能的解决方法是使用重新定义了filterAcceptsRow或filterAcceptsColumn或两者的QSortFilterProxyModel子类

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

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

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


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

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

如果您在windows中有映射的网络驱动器,它将显示在QDir::drives中,因此这不起作用。最好的解决方案是前一个,在QSortFilterProxy模型中使用GetDriveType。我已经实现了它,它工作得非常完美,没有任何性能损失。需要重新定义filterAcceptsRow。我已经实现了它,它工作得非常好。