我发现QSortFilterProxyModel在与QFileSystemModel一起使用时无法正确过滤。有时它在视图中留下了NOTHING。任何人都可以指出我错在哪里吗?
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QFileSystemModel>
#include <QSortFilterProxyModel>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QFileSystemModel *fsm = new QFileSystemModel(this);
fsm->setRootPath(".");
QSortFilterProxyModel *sfpm = new QSortFilterProxyModel();
sfpm->setDynamicSortFilter(true);
sfpm->setSourceModel(fsm);
ui->tableView->setModel(sfpm);
ui->tableView->setRootIndex(sfpm->mapFromSource(fsm->index(".")));
sfpm->setFilterRegExp(QRegExp(".*cpp"));
sfpm->setFilterKeyColumn(0);
}
MainWindow::~MainWindow()
{
delete ui;
}
在上面的代码中,如果我使用QRegExp(“。*”),它会显示当前路径中的所有文件。您可以创建一个简单的项目来测试它。
答案 0 :(得分:1)
我想我已经有了正确的解决方案。我需要继承QSortFilterProxyModel来做一些关于“source_parent”的事情:
class MySortFilterProxyModel : public QSortFilterProxyModel
{
protected:
virtual bool MySortFilterProxyModel::filterAcceptsRow(
int source_row, const QModelIndex &source_parent) const{
QFileSystemModel *sm = qobject_cast<QFileSystemModel*>(sourceModel());
if (source_parent == sm->index(sm->rootPath())) {
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
}
return true;
}
};