Как установить каталог начальной точки для QTreeView? - PullRequest
1 голос
/ 26 января 2020

Допустим, в моей системе есть эти папки:

/home/rob/musics/...
/home/rob/texts/...
/home/rob/images/...

Я пытаюсь создать qtreeview (я не знаю, является ли это наиболее подходящим виджетом для этого), чтобы показывать только папки / подпапки и файлы в каталоге / rob /. Но проблема в том, как я это делаю, показывает мне все каталоги внутри каталога root.

Что я хочу видеть (файлы и доступ к подпапкам):

/musics/...
/texts/...
/images/...

Что я получаю:

/home/
/lib/
/root/
/usr/
/...

Я не хочу этого ! Как я могу установить отправную точку для этой файловой системы? Вот что я попробовал:

//  fsmodel is a QFileSystemModel
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),  ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    const QString rootPath = "/home/rob/";

    fsModel = new QFileSystemModel(this);
    fsModel->setRootPath(rootPath);

    ui->treeView->setRootIndex(fsModel->index(rootPath));
    ui->treeView->setModel(fsModel);
}

Я использую linux.

1 Ответ

3 голосов
/ 26 января 2020

Если вы выполняете свой код, вы должны получить следующее предупреждающее сообщение:

QAbstractItemView::setRootIndex failed : index must be from the currently set model
QAbstractItemView::setRootIndex failed : index must be from the currently set model

И очевидно, что у QTreeView еще нет модели, но вы передаете ему rootIndex модели, которую он делает не знаю.

Решение состоит в том, чтобы сначала установить модель, а затем rootIndex:

ui->treeView->setModel(fsModel);
ui->treeView->setRootIndex(fsModel->index(rootPath));
...