在Qt中有一个类QAbstractTableModel
,它是一个抽象类。为什么Qt设计者提供了一个抽象类,并没有提供可用于建模表的实际类。为什么设计师让我将类子类化以使用它?
答案 0 :(得分:4)
那是因为该类不用于建模表,它是一个接口,所有类型的表必须遵守。 Qt有一些你可以重用的具体模型,只需查看基础QAbstractItemModel
类的documentation中的“继承者”列表。其中一些派生类是具体的,即那些名称不以QAbstract
开头的那些:)
如果您想要通用模型,可以使用QStandardItemModel
。
您需要阅读C ++中的接口。使用抽象虚拟方法实现的接口是一种非常常见的习惯用法。参见例如here。在C ++ 11中,您可以使用don't use the virtual method idiom的接口。
如果你问“为什么Qt不提供任何实现该接口的通用具体类”,答案是:因为这是一项不可能完成的工作。每个人的数据源都有不同的实现细节,Qt不可能认为每个人的方法都是可行的,并提供了一个通用的桥梁。
QAbstractTableModel
的存在是为了让您在自己的数据模型和Qt的数据模型之间创建适配器。
答案 1 :(得分:1)
有通用模型实现,例如QStandardItemModel,因此您可以根据需要将其用于表,树或列表视图。