gpt4 book ai didi

c++ - 使用 QFileSystemModel 和 QSortFilterProxyModel 子类过滤特定文件夹的文件

转载 作者:行者123 更新时间:2023-11-28 05:07:09 24 4
gpt4 key购买 nike

我正在尝试使用 QSortFilterProxyModel 过滤 QFileSystemModel 的文件。问题是,我只想在过滤时显示特定文件夹的内容。通常,如果我只想使用 QFileSystemModel 显示特定文件夹的内容,我会这样做:

view = new QTreeView(this);
fSystemModel = new QFileSystemModel(this);

view->setModel(fSystemModel);

fSystemModel->setRootPath("C:/Qt");
QModelIndex idx = fSystemModel->index("C:/Qt");

view->setRootIndex(idx);

但是当我使用 QSortFilterProxyModel 时,索引必须是 QSortFilterProxyModel 的。由于我在 Qt Documentation 中找不到太多信息关于这个问题,我环顾四周发现this thread .以此为基础,我创建了以下内容:

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

layout = new QVBoxLayout();
ui->centralWidget->setLayout(layout);

view = new QTreeView(this);
fSystemModel = new QFileSystemModel(this);
filter = new FilterModel();

filter->setSourceModel(fSystemModel);

layout->addWidget(view);
view->setModel(filter);

fSystemModel->setRootPath("C:/Qt");
QModelIndex idx = fSystemModel->index("C:/Qt");
QModelIndex filterIdx = filter->mapFromSource(idx);

qDebug() << filterIdx.isValid();

view->setRootIndex(filterIdx);
}

FilterModel.cpp(QSortFilterProxyModel 子类)

#include "filtermodel.h"

bool FilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
QModelIndex zIndex = sourceModel()->index(source_row, 0, source_parent);
QFileSystemModel* fileModel = qobject_cast<QFileSystemModel*>(sourceModel());
return fileModel->fileName(zIndex).contains("C"); //This line will have custom
//filtering behaviour in the future,
//instead of the name searching one.
}

但是,当我运行程序时,它并没有使用指定的根索引。此外,当我使用 qDebug() 查看 filterIdx 是否有效时,它会打印 false。我做错了什么?

最佳答案

尝试查看下一行的结果

qDebug() << idx << " " << fSystemModel->fileName(idx) << " " << filterIdx.isValid();

您会注意到 fSystemModel->fileName(idx)"Qt"(不是完整路径 "C:/Qt") .因此它不包含来自过滤器的 "C" (FilterModel::filterAcceptsRow)。

关于c++ - 使用 QFileSystemModel 和 QSortFilterProxyModel 子类过滤特定文件夹的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44425594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com