AbstactTableModels在同一数据源上工作

时间:2016-06-27 12:33:02

标签: qt qabstracttablemodel

假设我想实现一个库工具来管理不同类型的媒体。因此我有一个基类Medium和派生类,例如书和DVD有其他属性。

我的问题是我无法弄清楚如何正确设计模型。我希望能够在一个TableView中显示媒体,其中包含Medium类的基本属性以及另一个TableView中的DVD,以及来自派生类的特殊属性。如果我删除DVD,我也希望它在Media表中删除。因此我认为他们需要拥有相同的数据源。

实现这一目标的最佳方法是什么?没有找到任何说明该问题的例子。

2 个答案:

答案 0 :(得分:0)

它可以是一个简单的模型,其中包括来自所有三个来源的所有列 - 中,DVD,书。

在一个视图中,您只创建" medium"要显示,其他隐藏,在另一个视图中,您只允许显示" dvd"列。但是模型对象只是一个应用于所有视图的源。

如果从模型中删除了一行,则所有视图都将适当更新。同样关于"添加"。

答案 1 :(得分:0)

实现自己的Tree Item(看看,例如:http://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html#treeitem-class-definition

添加类似enum的类型,为TreeItem添加方法以使用类型进行操作,然后使用代理模型(详细示例:http://doc.qt.io/qt-5/qsortfilterproxymodel.html#details)对数据进行排序。

像:

enum Property {Book, DVD, Other };
class TreeItem
{
...
public:
Property GetProperty() const;
void setProperty(Property iProp);
...
};