Question

J'utilise QFileSystemModel dans un TreeView de coutume pour permettre aux utilisateurs de sélectionner des dossiers à l'aide de cases à cocher. Mon problème est que les lecteurs réseau mappés sont répertoriés comme des disques durs, mais je ne peux pas fonctionner sur eux, donc je veux seulement montrer les lecteurs locaux. Comment puis-je forcer QFileSystemModel à montrer que les lecteurs locaux?

Était-ce utile?

La solution

D'après ce que je suis en mesure de comprendre des sources et documents, il est impossible de le faire directement avec QFileSystemModel.

La solution possible que je peux penser est d'utiliser une sous-classe QSortFilterProxyModel avec redéfini filterAcceptsRow () ou filterAcceptsColumn () ou les deux, je ne suis pas sûr que l'un comme je ne l'ai pas utilisé QFileSystemModel et ne sais pas ce qu'il considère les colonnes et quelles lignes. La méthode redéfinie alors comprendre le chemin du fichier éventuellement en utilisant des données () avec QFileSystemModel :: FilePathRole ou en utilisant qobject_cast <> et appelant QFileSystemModel :: filePath (). Ensuite, il serait en quelque sorte figure le chemin de racine d'un lecteur et d'appeler GetDriveType () fonction WinAPI que Qt fournit apparemment aucun moyen de savoir si un lecteur est réseau ou non. Bien sûr, ce genre de choses doit être mis sous #ifdef Q_OS_WIN32.

Cela semble compliqué, mais je ne peux penser à aucune autre manière. Je suis également pas sûr GetDriveType rapide () est, mais s'il y a des problèmes de performance, il est toujours possible de mettre en œuvre une sorte de mise en cache.

Autres conseils

Comment l'utilisation de filtre QFileSystemModel à seulement QDIR :: lecteurs. A ma connaissance, cette liste uniquement les disques durs locaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top