我有一个Qt C++应用程序,它使用了几个基于QAbstractItemModel的不同模型(最终)。
这些模型中的几个项目使用自定义代理来正确地呈现它们,这些都很好。
但是,我不确定如何最好地指定应该使用哪个代理类来呈现数据。
目前,在每个包含视图的表单中,我都调用::setItemDelegateForColumn()。
这感觉非常笨拙,因为它依赖于表单类,这些类知道应该为每个模型中的每一列使用哪个委托--如果将来这种情况发生变化,我必须更新每个表单。
此外,在某些情况下,View是在需要不同代理的两个不同模型之间进行切换,因此对于这些模型,form类也必须处理该切换。
有更好的方法吗?
发布于 2013-07-10 21:10:03
模型必须不知道表示,所以您应该处理视图。您可以对涉及视图类(例如QTableView)的子类进行子类,并重新实现setModel虚拟方法。在实现中,调用父类实现并根据指定的模型调整项委托。将该类的对象放入所有窗体中。因此表格将不了解代表的情况。我认为这种方法符合模型-视图的概念。
发布于 2013-07-10 14:01:19
AFAIK没有更好的方法了。但是,我过去没有手动更新每个表单,而是有一个包含列索引的enum,它在模型和视图中都用于检索数据和应用委托。
https://stackoverflow.com/questions/17571074
复制相似问题