Sorting Folders First QFileSystemModel With Directory Filter
-
Hello,
I am trying to show folders and files inside of a QTreeView.
- Sort by folders first then files
- Dont display the root directory or files (It should start showing files in sBasePath)
I have tried several things but
QString sBasePath = "/home/myuser/Desktop/displayRoot/subfolder/"; filesModel = new QFileSystemModel(this); filesModel->setFilter(QDir::AllDirs | QDir::AllEntries |QDir::NoDotAndDotDot); ui->treeView->setModel(filesModel); ui->treeView->setRootIndex(filesModel->setRootPath(sBasePath)); //ui->treeView->setSorting(QDir::DirsFirst | QDir::IgnoreCase); // doesnt work ui->treeView->setAnimated(false); ui->treeView->setIndentation(20); ui->treeView->setSortingEnabled(true); ui->treeView->hideColumn(1); ui->treeView->hideColumn(2); ui->treeView->hideColumn(3); ui->treeView->setModel(filesModel);
This code works and only display files and folders from "/home/myuser/Desktop/displayRoot" but I need the folders to display first.
The setSorting method is seem to be what I need but its part of the previous/depreciated version.
How can I get this to sort correctly?
Thanks in advance for any help you can give me!
-
Hi,
You can create your own QAbstractProxyModel that will do the filter or use QSortFilterProxyModel.
-
@EverydayDiesel
I thinkQDir::DirsFirst
is to do withQDir
. There is no "presupplied" option for this forQFileSystemModel
. You need to write code implementingQSortFilterProxyModel
. See examples:
https://stackoverflow.com/questions/10789284/qfilesystemmodel-sorting-dirsfirst
https://stackoverflow.com/questions/20006775/how-to-sort-folders-above-files-with-qsortfilterproxymodelThey are old, but I believe they are still relevant.