Как исключить подключенные сетевые диски из QFileSystemModel в QT? - PullRequest
2 голосов
/ 18 декабря 2010

Я использую пользовательский подкласс QFileSystemModel в древовидной структуре, чтобы позволить пользователям выбирать папки, используя флажкиМоя проблема в том, что подключенные сетевые диски указаны как жесткие диски, но я не могу на них работать, поэтому я хочу показывать только локальные диски.Как заставить QFileSystemModel показывать только локальные диски?

Ответы [ 2 ]

2 голосов
/ 18 декабря 2010

Из того, что я смог выяснить по источникам и документам, невозможно сделать напрямую с QFileSystemModel.

Единственный возможный обходной путь, о котором я могу подумать, - это использовать подкласс QSortFilterProxyModel с переопределенными filterAcceptsRow () или filterAcceptsColumn () или обоими, я не уверен, какой из них я не использовал QFileSystemModel, и не знаю, что это считает столбцы и какие строки. Затем переопределенный метод определит путь к файлу, возможно, используя data () с QFileSystemModel :: FilePathRole или используя qobject_cast <> и вызывая QFileSystemModel :: filePath (). Затем он каким-то образом определит корневой путь диска и вызовет функцию WinAPI GetDriveType (), поскольку Qt, по-видимому, не позволяет выяснить, является ли диск сетевым или нет. Конечно, этот материал должен быть помещен в #ifdef Q_OS_WIN32.

Это выглядит сложно, но я не могу придумать другого пути. Я также не уверен, насколько быстрым является GetDriveType (), но если есть проблемы с производительностью, всегда можно реализовать какое-то кэширование.

0 голосов
/ 13 января 2011

Как насчет использования фильтра QFileSystemModel только для QDir :: Drives. Насколько мне известно, здесь перечислены только локальные жесткие диски.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...