如何将起点目录设置为 QTreeView?

Posted

技术标签:

【中文标题】如何将起点目录设置为 QTreeView?【英文标题】:How to set a starting point directory to a QTreeView? 【发布时间】:2020-01-26 17:08:24 【问题描述】:

假设我的系统中有这个文件夹:

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

我正在尝试创建一个 qtreeview(我不知道这是否是最合适的小部件)以仅显示 /rob/ 目录中的文件夹/子文件夹和文件。但问题是我这样做的方式向我显示了根目录中的所有目录。

我想看的(文件和对子文件夹的访问):

/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】:

如果您执行代码,您应该会收到以下警告消息:

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));

【讨论】:

以上是关于如何将起点目录设置为 QTreeView?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 QTreeView 以在使用箭头键移动时保留多项选择

如何调整 QTreeView 和 QStandardItemModel 中的行大小?

如何在 QTreeWidget/QTreeView 中获取行高

如何设置qsplitter中widget的默认宽度

设置 QTreeView 标头的标头文本

在QTreeView中拖放,removeRows没有被调用