14

I am attempting to create a Qt application which shows the contents of a folder (“Users” folder in Mac OS). Here is the code:

QFileSystemModel *dirModel = new QFileSystemModel;
dirModel->setRootPath("/Users");

ui->listView->setModel(dirModel);

I also attempted using this code

When i run the application, instead of showing the content of the “/Users” Folder, it shows the root drive (note: not the content of the drive). The folder does exist and i also tried using other folders.

Community
  • 1
  • 1
tanto
  • 339
  • 1
  • 2
  • 11
  • Did you attempt the code from the question you linked or from its answer ? (I just edited it to make it a little clearer). – alexisdm Sep 10 '12 at 19:14
  • I atteempted the code from the Question. I will attempt the answer now – tanto Sep 10 '12 at 19:34
  • `setRootPath` installs a file system watcher on a path to reflect changes. One needs `setRootIndex` as said in answers below. https://doc.qt.io/qt-5/qfilesystemmodel.html#setRootPath – Winand Apr 03 '19 at 20:14

2 Answers2

15

Did you try forcing the index to show the directory ?

listView->setRootIndex(dirModel->index("/Users"));

This works fine for me:

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QFileSystemModel model;
    model.setRootPath("/Users");
    QListView view;
    view.setModel(&model);
    view.setRootIndex(model.index("/Users/"));
    view.show();
    return app.exec();
}
count0
  • 2,537
  • 2
  • 22
  • 30
  • I get an error : QAbstractItemView::setRootIndex failed : index must be from the currently set model – tanto Sep 10 '12 at 19:25
10

This code has worked for me as well:

QFileSystemModel *dirModel = new QFileSystemModel(this);
dirModel->setRootPath("/Users");

ui->listView->setModel(dirModel);
ui->listView->setRootIndex(dirModel->setRootPath("/Users"));
tanto
  • 339
  • 1
  • 2
  • 11
  • note, dirModel->setRootPath(...) returns a QModelIndex. You can call this once and pass the index into the setRootIndex – Brian Feb 14 '23 at 23:05