为什么Qt提供了一个子类来进行子类化?

时间:2016-04-14 17:51:04

标签: c++ qt

在Qt中有一个类QAbstractTableModel,它是一个抽象类。为什么Qt设计者提供了一个抽象类,并没有提供可用于建模表的实际类。为什么设计师让我将类子类化以使用它?

2 个答案:

答案 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,因此您可以根据需要将其用于表,树或列表视图。