Frage

Ich verwende eine benutzerdefinierte Unterklasse QFILESystemModel in einer TreeView, mit der Benutzer Ordner mithilfe von Kontrollkästchen auswählen können. Mein Problem ist, dass kartierte Netzwerkantriebe als Festplatten aufgeführt sind, aber ich kann nicht mit ihnen arbeiten, daher möchte ich nur lokale Laufwerke zeigen. Wie kann ich QFILESSystemmodel zwingen, nur lokale Laufwerke zu zeigen?

War es hilfreich?

Lösung

Nach dem, was ich aus Quellen und Dokumenten herausfinden konnte, ist es unmöglich, direkt mit QFILESSYSTEMMODEL zu tun.

Die einzig mögliche Problemumgehung, die ich mir vorstellen kann, ist die Verwendung einer QsortFilterproxymodell -Unterklasse mit neu definiertem filteracceptsrow () oder filteracceptscolumn () oder beides, ich bin mir nicht sicher Welche Reihen. Die neu definierte Methode würde dann den Pfad der Datei möglicherweise unter Verwendung von Data () mit QFILESystemmodel :: filepathrol oder mit qObject_cast <> und qfilesystemmodel :: filepath () ermitteln. Dann würde es irgendwie den Root -Pfad eines Laufwerks und den Aufrufen von Getdrivetype () WinAPI -Funktion herausfinden, da QT offenbar keine Möglichkeit bietet, herauszufinden, ob ein Laufwerk ein Netzwerk ist oder nicht. Natürlich muss dieses Zeug untergebracht werden #ifdef Q_OS_WIN32.

Das sieht kompliziert aus, aber ich kann mir keinen anderen Weg vorstellen. Ich bin mir auch nicht sicher, wie schnell GetDrivetype () ist, aber wenn es Leistungsprobleme gibt, ist es immer möglich, eine Art von Caching zu implementieren.

Andere Tipps

Wie wäre es mit QFILESSystemmodel -Filter zu nur Qdir :: Laufwerken. Meines Wissens listet dies nur die lokalen Festplatten auf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top