提问者:小点点

在QTreeView中仅显示共享驱动器和文件夹


我编写了以下代码,可以在QTreeView小部件中显示基于UNC路径的共享文件夹。 但是,QTreeView显示了一个与我的本地驱动器内容共享的文件夹。 我想从那个表示中删除本地驱动器。 我该怎么做呢?

void MainWindow::ListDirectory(QString arg_smb_path)
{
    o_directorySystemModel = new QFileSystemModel(this);
    o_directorySystemModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Hidden);
    o_directorySystemModel->setRootPath(arg_smb_path);

    ui->treeView->setModel(o_directorySystemModel);
    ui->treeView->hideColumn(1);
    ui->treeView->hideColumn(2);
    ui->treeView->hideColumn(3);


    o_fileSystemModel = new QFileSystemModel(this);
    o_fileSystemModel->setFilter(QDir::NoDotAndDotDot | QDir::Files | QDir::Hidden);
    o_fileSystemModel->setRootPath(arg_smb_path);

    ui->listView->setModel(o_fileSystemModel);
    ui->listView->setContextMenuPolicy(Qt::CustomContextMenu);
}

我应该如何在我的程序中解决这个问题? 我只想使用Windows的UNC/CIFS在QTreeView中显示共享驱动器和文件夹。


共1个答案

匿名用户

实现QSortProxyFilterModel作为文件系统模型和树视图之间的中间。

例如。 像这样:

class FilterSharedFoldersModel : QSortFilterProxyModel {
protected:
    bool filterAcceptsRow(int row, const QModelIndex &parent) const override;
};

现在在'filterAcceptsRow()'的实现中,检查相应路径的类型并分别返回true或false。 请参阅方法文档以及示例教程。

布线相当容易:

o_directorySystemModel = new QFileSystemModel(this);
o_directorySystemModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Hidden);
o_directorySystemModel->setRootPath(arg_smb_path);
o_directoryFilterModel = new FilterSharedFoldersModel();
o_directoryFilterModel->setSourceModel(o_directorySystemModel);
ui->treeView->setModel(o_directoryFilterModel);