2016-04-14 78 views
-4

在Qt中有一个类QAbstractTableModel,它是一个抽象类。为什么Qt设计人员提供了一个抽象类,并没有提供可用于建模表的实际类。为什么设计师让我把班级分类来使用它?为什么Qt提供一个类来继承它?

回答

4

这是因为该类不用于表建模,它是一个模型化表的所有类必须遵守的接口。 Qt有几个可重用的具体模型,只需查看基类QAbstractItemModeldocumentation中的“Inherited by”列表即可。其中一些派生类是具体的,即那些名称不以0123'开头的:) :)

如果你想要一个通用模型,你可以使用一个QStandardItemModel

您需要阅读C++中的接口。使用抽象虚拟方法实现的接口是一个非常常见的习惯用法。见例如here。在C++ 11中,您可以使用接口don't use the virtual method idiom

如果你问“为什么Qt不提供任何实现该接口的通用具体类”,答案是:因为这是不可能的工作。每个人的数据源都有不同的实现细节,Qt不可能预测每个人的方法并提供一个通用桥梁。

QAbstractTableModel存在允许您在自己的数据模型和Qt的数据模型之间创建适配器。

+0

为什么所有建模表的类都应该遵循该接口?有什么是用于坚持该界面的观点? – andreahmed

+1

@andreahmed由于没有接口,不可能编写通用视图或代理来显示/修改数据。 –

1

有通用模型实现,例如QStandardItemModel,因此您可以根据需要将它用于表,树或列表视图。