Domanda

sto usando QFileSystemModel sottoclasse una consuetudine in una vista ad albero per consentire agli utenti di selezionare le cartelle utilizzando le caselle di controllo. Il mio problema è che le unità di rete mappate sono elencati come dischi rigidi, ma non posso operare su di essi, quindi voglio mostrare solo le unità locali. Come posso forzare QFileSystemModel per mostrare solo le unità locali?

È stato utile?

Soluzione

Da quello che ho potuto capire da fonti e documenti, è impossibile fare direttamente con QFileSystemModel.

L'eventuale unica soluzione mi viene in mente è quello di utilizzare una sottoclasse QSortFilterProxyModel con ridefinito filterAcceptsRow () o filterAcceptsColumn () o entrambi, non sono sicuro che uno come non ho usato QFileSystemModel e non so che cosa ritiene colonne e quali righe. Il metodo ridefinito allora capire il percorso del file eventualmente utilizzando i dati () con QFileSystemModel :: FilePathRole o utilizzando qobject_cast <> e chiamando QFileSystemModel :: filePath (). Allora sarebbe in qualche modo capire il percorso principale di un'unità e richiamare GetDriveType) funzione WinAPI (come Qt fornisce apparentemente alcun modo per capire se un'unità è rete o meno. Naturalmente, queste cose deve essere messo sotto #ifdef Q_OS_WIN32.

Questo sembra complicato, ma posso pensare a nessun altro modo. Sono, inoltre, non sicuro di come veloce GetDriveType () è, ma se ci sono problemi di prestazioni è sempre possibile implementare una sorta di caching.

Altri suggerimenti

Come sull'utilizzo del filtro QFileSystemModel ai soli QDir :: Drives. A mia conoscenza, questo elenca solo i dischi rigidi locali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top