为QAbstractItemModel项指定Delegate类

时间:2013-07-10 12:49:43

标签: qt delegates qt4 model-view

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

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

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

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

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

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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