【发布时间】:2017-07-04 19:00:24
【问题描述】:
我有一个自定义 QSortFilterProxyModel 只显示表中的某些行和列。我还有一个自定义 QItemDelegate 来控制如何绘制表格中的某些值。我只是将委托应用于需要它的列,问题似乎是当我让代理模型隐藏某些列时,它会弄乱委托。
例如,假设我有 A-G 列,我将自定义委托应用于 F 列。
A B C D E F G
-------------------
o o o o o X o
o o o o o X o
o o o o o X o
如果我的代理模型没有显示 B 列,我的委托最终会被应用到 G 列。
A C D E F G
----------------
o o o o o X
o o o o o X
o o o o o X
我已经能够通过调用隐藏视图上的列而不是代理模型中的列来解决该问题
table->setColumnHidden(B, true);
我认为这可行,但这是唯一的解决方案吗?委托和代理模型类不能更好地协同工作似乎是一个错误,就像您可以在同一模型上使用其中一个但不能同时使用一样。
【问题讨论】:
-
据我所知,它按预期工作:项目委托应用于视图的列,这应该与模型无关。此外,您的模型是代理模型,因此它被应用于正确的列。
-
我想你是对的@cbuchart。我想这是有道理的,当我在视图上调用 setItemDelegateForColumn 时,它将是我指定的视图的列,而不是模型的列。如果您知道您使用的代理模型可能会更改列号,我认为您在下面提出的答案将是一个有效的解决方法。
-
你可以做一个 qobject_cast 来检查模型是否是代理模型。
标签: c++ qt qabstractitemmodel qitemdelegate