Qt显示模型中的所有字段

Qt显示模型中的所有字段,qt,Qt,我正在表视图中显示来自QSqlModel的查询。e、 G SELECT id, name FROM person; 我不想在视图中显示id,但是当用户单击该视图中的行时,我需要id Qt中是否有一个模型,它允许我在视图中只显示指定的列,但也提供对不可见列的访问 我过去常常通过隐藏列来实现这一点,例如: ui->myview->setColumnHidden( 0, true ); 但是可能有更好的解决方案。因为OP修改了问题,排除了使用QTableView的可能性,唯一可行的方法

我正在表视图中显示来自QSqlModel的查询。e、 G

SELECT id, name FROM person;
我不想在视图中显示id,但是当用户单击该视图中的行时,我需要id

Qt中是否有一个模型,它允许我在视图中只显示指定的列,但也提供对不可见列的访问

我过去常常通过隐藏列来实现这一点,例如:

ui->myview->setColumnHidden( 0, true );

但是可能有更好的解决方案。

因为OP修改了问题,排除了使用
QTableView
的可能性,唯一可行的方法是创建一个从
QSortFilterProxyModel
派生的新类。您可以覆盖
过滤器AcceptsColumn
方法

可以找到有关类
QSortFilterProxyModel
的文档

QSortFilterProxyModel可用于对项目进行排序、筛选项目或两者兼而有之。该模型通过将它提供的模型索引映射到新索引(对应于不同位置)以供视图使用,从而转换源模型的结构。这种方法允许就视图而言重构给定的源模型,而不需要对基础数据进行任何转换,也不需要在内存中复制数据


您还必须覆盖
MapToSource
SourceToMap
。在这个StackOverflow的

中有一个很好的例子,我能想到的唯一其他解决方案是子类化QSortFilterProxyModel并重写FilterAcceptsColumn那么setColumnHidden有什么问题?或者你想对模型隐藏它,比如model.hideColumn()?@fxam:是的,没错!我不想配置每个显示模型数据的视图。@MichaelPetch:看起来不错!使用mapToSource应该给我包含所有数据的原始行,然后呢?我会接受它作为一个答案,如果你发布它。是的映射到源将给你所有数据的原始行。