Seite 1 von 1

QDirModel - Wie versch. Ordner auflisten?

Verfasst: 8. März 2010 14:22
von tribari
Hallo liebe QT-Gemeinde,

ich würde gern mein QDirModel dazu bringen mehrere Ordner anzuzeigen. Diese Verzeichnisse liegen im Grunde in einem gesammelten Überverzeichnis, jedoch möchte ich nicht alle Verzeichnisse von dort anzeigen lassen.

Code: Alles auswählen

dir
|_ subdir A
|_ subdir A2
|_ subdir A3
|_ subdir B
|_ subdir C
Ich möchte gerne nur die Verzeichnisse A* anzeigen lassen - bloss leider bekomme ich dies nicht hin.
Da diese Verzeichnisse alle mit derselben Zeichenkette beginnen (A*) - hatte ich versucht den rootIndex auf das überverzeichnis zu legen - und dann einen Filter anzulegen mit setNameFilter.
Dies hat leider nicht geklappt - da wohl, wie ich rausgefunden habe, dann auch Dateien gefiltert werden.

Gebt mir mal einen Denkanstoß wie ich mein Problem lösen kann ;-)

Nen eigenes QAbstractItemModel zu entwerfen, scheint mir etwas viel Aufwand für dieses simple Problem :-/ (auch habe ich dies noch nie gemacht ^^).

Ich danke schonmal im Vorraus für die Hilfe.

lg

Tribari

Verfasst: 8. März 2010 18:01
von upsala
Zum einen würde ich ein QFileSystemModel verwenden, zum anderen ein QSortFilterProxyModel zwischen dein Model und der View schalten.

Verfasst: 9. März 2010 08:46
von tribari
okay - QFileSystemModel steht mir derzeit wohl nicht zur Verfügung, da ich noch Qt Version 4.3.4 verwende.
Aber ich mache mich mal über QSortFilterProxyModel schlau - danke für den Hinweis ;-)

Verfasst: 9. März 2010 10:58
von tribari
So - hab diesbezüglich dann gleich wieder nen Problem - oder nen Denkfehler :D

Code: Alles auswählen

QDirModel* pDirModel = new QDirModel();
QTreeView* pTreeView = new QTreeView( this );
QSortFilterProxyModel* pProxyModel = new QSortFilterProxyModel( this );

pProxyModel->setSourceModel( pDirModel ); 
pTreeView->setModel( pProxyModel );

pTreeView->setRootIndex ( proxyModel->mapFromSource( pDirModel->index( "D:/temp" ) ) );
D:\temp wäre das Verzeichnis wo meine Ordner liegen...

Nun zeigt mein TreeView auch nur den Inhalt von D:\temp an - klappt.


Nun versuche ich aber zu filtern - ich möchte schliesslich nur die Verzeichnisse die mit "A" anfangen sehen (und deren Inhalt dann natürlich).

Code: Alles auswählen

pProxyModel->setFilterWildcard( "A*" );
pProxyModel->setFilterKeyColumn( 0 );
An dieser Stelle bin ich leider recht unsicher - wie ich da vorgehen soll ... jedenfalls ist das Ergebnis das in meiner TreeView garnichts mehr angezeigt wird :roll:

Wo liegt mein Denkfehler?

Verfasst: 9. März 2010 12:18
von upsala
Ich würde den Filter überladen, da du ja nur in einer Ebene filtern willst.

Verfasst: 11. März 2010 15:38
von tribari
Okay habs hinbekommen - war zwar etwas mehr recherche als gedacht - aber am Ende hab ich einen Weg gefunden.

Nun würde ich noch gerne wissen, ob es möglich ist, mit dem QSortFilterProxyModel meine Verzeichnisse unter anderem Namen im View darstellen zu lassen?

Daten zB in D:\temp:

Code: Alles auswählen

|_ A1
    |_ ...
|_ A2
    |_ ...
|_ A3
    |_ ...
|_ B1
    |_ ...
|_ B2
    |_ ...
Nun erhalte ich nach etwas arbeit folgende Ausgabe in meiner View, das ist schonmal genau das was ich wollte:

Code: Alles auswählen

|_ A1
    |_ ...
|_ A2
    |_ ...
|_ A3
    |_ ...
Ist es nun möglich mit dem QSortFilterProxyModel die obersten Verzeichnisse unter anderem Namen darzustellen?

zB:

Code: Alles auswählen

|_ Testfall A1
    |_ ...
|_ Testfall A2
    |_ ...
|_ Testfall A3
    |_ ...
Wahrscheinlich nicht oder? ;-)

Verfasst: 11. März 2010 19:09
von upsala
Nur mit sehr viel Aufwand.