一个QStandardItem模型,用于不同的QTableView、通用视图和特定视图

一个QStandardItem模型,用于不同的QTableView、通用视图和特定视图,qt,model,qtableview,Qt,Model,Qtableview,我真的不知道这是否有意义,但这就是我试图做的: 我正在用QT做游戏编辑器。目前,我正在使用QStandardItemModel来存储所有场景项。这些项目有名称、位置、纹理(纹理向量,这是一个自定义类)、动画(动画向量)等 我发现为行添加一个项目很有用,因为除了在单个位置添加或删除这些项目之外,我还可以轻松地添加或删除这些项目,因此更改此模型应该会影响整个应用程序 现在,我正在尝试为某个项目的“纹理”创建特定视图。此QTableView应显示纹理的名称、路径等。因此,基本上,我如何在常规模型中获取

我真的不知道这是否有意义,但这就是我试图做的:

我正在用QT做游戏编辑器。目前,我正在使用QStandardItemModel来存储所有场景项。这些项目有名称、位置、纹理(纹理向量,这是一个自定义类)、动画(动画向量)等

我发现为行添加一个项目很有用,因为除了在单个位置添加或删除这些项目之外,我还可以轻松地添加或删除这些项目,因此更改此模型应该会影响整个应用程序


现在,我正在尝试为某个项目的“纹理”创建特定视图。此QTableView应显示纹理的名称、路径等。因此,基本上,我如何在常规模型中获取纹理向量并填充另一个视图而不执行另一个模型?

您将需要使用QSortFilterProxy模型。像这样设置一个

QTableView *tableView = new QTableView;
MyItemModel *sourceModel = new MyItemModel(this);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);

proxyModel->setSourceModel(sourceModel);
proxyModel->setFilterKeyColumn(column_#_to_filter_by);
proxyModel->setFilterRegExp(a_regex_that_matches_the_item_you_want_to_display);
tableView->setModel(proxyModel);

您应该能够使用一个模型和不同的代理来设置不同的视图。

感谢您的代码,它现在看起来非常清晰,这正是我想要的。但我还有一个问题,如果我想为另一个视图获取特定列,该怎么办。假设你有一个人物模型,有名字、姓氏、年龄、性别。而且你不想看到一个只有名字和姓氏的视图。该代理看起来像是假装只针对一列。在这种情况下,您可以在模型上设置一个视图,对于您不感兴趣的每一列,调用setColumnHidden(column_num,true)。我还找到了另一个解决方案。可以对QSortFilterProxyModel进行子类化,并重写filterAcceptsColumn方法,在该方法中,您希望对不希望显示的列返回false。再次感谢。