Как исключить сопоставление сетевых дисков из Qfilesystemmodel в QT?

StackOverflow https://stackoverflow.com/questions/4477997

Вопрос

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

Это было полезно?

Решение

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

Единственный возможный обходной путь, который я могу придумать, - это использовать подкласс QsortFilterProxymodel с переосмысленным FilteracceptsRow () или FilterAcceptscolumn () или оба, я не уверен, какой из них, поскольку я не использовал qfilesystemmodel и не знаю, что он рассматривает колонки Какие строки. Затем переопределенный метод выяснит путь файла, возможно, с помощью data () с qfilesystemmodel :: filepathrole или с помощью qobject_cast <> и вызовов qfilesystemmodel :: filepath (). Тогда это каким -то образом выяснит корневой путь диска и вызовет функцию getDrivetype () WinApi, поскольку QT, по -видимому, не дает возможности выяснить, является ли диск сетевым или нет. Конечно, этот материал должен быть поставлен под #ifdef Q_OS_WIN32.

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

Другие советы

Как насчет использования qfilesystemmodel filter только для qdir :: drives. Насколько мне известно, это перечисляет только местные жесткие диски.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top