0

我有一个 Qt C++ 应用程序,它使用基于 QAbstractItemModel 的几种不同模型(最终)。

这些模型中的一些项目使用自定义委托来正确渲染它们,这些都很好用。

但是,我不确定如何最好地指定应该使用哪些 Delegate 类来呈现数据。

目前,我在每个包含视图的表单中调用 QAbstractItemView::setItemDelegateForColumn() 。

这感觉很笨拙,因为它依赖于表单类知道每个模型中的每一列应该使用哪个委托 - 如果将来发生变化,我必须更新每个表单。

此外,在某些情况下,视图在需要不同委托的两个不同模型之间切换,因此对于这些,表单类也必须处理该切换。

有一个更好的方法吗?

4

2 回答 2

1

模型一定不知道表示,所以你应该处理视图。您可以将涉及的视图类(例如QTableView)子类化并重新实现setModel虚拟方法。在您的实现中调用父类实现并根据指定的模型调整项目委托。将此类的对象放入所有表单中。所以表单不会知道代表。我认为这种方法符合模型视图的概念。

于 2013-07-10T21:10:03.623 回答
0

AFAIK,没有更好的方法。但是,我没有手动更新每个表单,而是有一个包含列索引的枚举,它在模型和视图中都用于检索数据和应用委托。

于 2013-07-10T14:01:19.540 回答