2016-06-29 3 views
1

Ich möchte einen QDirModel haben, der sowohl Ordner als auch Dateien enthält (also verwende ich AllEntries).QDirModel setNameFilters versteckt Ordner

Das Problem ist, dass, wenn ich setNameFilters() auf meinem QDirModel aufrufen, werde ich alle Ordner verlieren. Gibt es eine Möglichkeit, Ordner von der Filterung auszuschließen?

Vielen Dank.

Antwort

2

Sie sollten QFileSystemModel statt QDirModel verwenden:

Die Nutzung von QDirModel wird nicht mehr empfohlen. Die Klasse QFileSystemModel ist eine performantere Alternative.

Qt-Dokumentation: QDirModel und QFileSystemModel

Für Ihre Frage - für die Kombination von Fahnen aussehen: QDir::AllDirs | QDir::Files in setFilter

Einfaches Beispiel, wenn Sie QDirModel verwenden:

QTreeView view; 
QStringList filters; 
filters << "*.txt"; 
QDirModel* dirModel = new QDirModel(&view); 
dirModel->setFilter(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot); 
dirModel->setNameFilters(filters); 
view.setModel(dirModel); 
view.show(); 

Einfaches Beispiel , wenn Sie QFileSystemModel:

verwenden
QTreeView view; 
StringList filters; 
filters << "*.txt"; 
QFileSystemModel* fileSystemModel = new QFileSystemModel(&view); 
fileSystemModel->setRootPath("C:/"); 
fileSystemModel->setFilter(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot); 
fileSystemModel->setNameFilterDisables(false); 
fileSystemModel->setNameFilters(filters); 
view.setModel(fileSystemModel); 
view.show(); 
+0

danke @Kirill Chernikov. Aber die Frage bleibt .. Wie ist es möglich, Ordner von der Filterung auszuschließen? – michalis

+0

Wie Sie in der Dokumentation sehen können: "QDir :: AllDirs - Listet alle Verzeichnisse auf; d. H., Wenden Sie die Filter nicht auf Verzeichnisnamen an." Wenn Sie Filter für name festlegen, gelten diese Filter nicht für Verzeichnisse (Ordner), sondern nur für Dateien. –