我有一个Qt C ++应用程序,它使用几个不同的模型(最终)基于QAbstractItemModel。
这些模型中的一些项目使用自定义委托来正确渲染它们,这些效果很好。
但是,我不确定如何最好地指定应该使用哪些Delegate类来呈现数据。
目前,我在包含视图的每个表单中调用QAbstractItemView :: setItemDelegateForColumn()。
这感觉非常笨拙,因为它依赖于表单类知道哪个委托应该用于每个模型中的每一列 - 如果将来发生变化,我必须更新每个表单。
此外,在某些情况下,View正在两个需要不同Delegates的不同模型之间切换,因此对于这些,表单类也必须处理该开关。
有更好的方法吗?
答案 0 :(得分:1)
模型必须不知道表示,因此您应该处理视图。您可以子类化所涉及的视图类(例如QTableView
)并重新实现setModel
虚拟方法。在您的实现中,调用父类实现并根据指定的模型调整项委托。将此类的对象放在所有表单中。因此,表格不会了解代表。我认为这种方法与模型 - 视图概念一致。
答案 1 :(得分:0)
AFAIK,没有更好的方法。 但是,我不是手动更新每个表单,而是使用包含列索引的枚举,该索引在模型和视图中都用于检索数据和应用委托。