QAbstractItemModel相比于QStandardItemModel有哪些优势?

8
我希望使用模型存储自定义数据。但是,我有点困惑于选择哪个项模型进行子类化。请明确一下,哪个模型最适合子类化?另外,我需要了解QAbstractItemModel相对于QStandardItemModel的优势。
谢谢!
1个回答

2
这取决于您的需求。 如果您只想存储自定义数据而不想编写自己的模型逻辑,则使用 QStandardItemModel。这个通用的模型可以用于自定义数据,而无需创建子类。
另一方面,如果您希望编写自己的模型逻辑,则选择 QAbstractItemModel。它是一个抽象类,意味着它没有实现任何行为,只是一个“接口”。它告诉您应该实现哪些方法,以便将其作为Qt中的另一个ItemModel类使用。

谢谢kousalik!还有其他主要的区别吗? - Dev
不,QStandardItemModel是QAbstractItemModel的一个实现(子类)。 - Kousalik
@Kousalik,您能否详细说明一下“模型逻辑”是什么意思?QStandardItemModel实现了哪些特定的模型逻辑,而AbstractItemModel没有实现呢?例如,如果您希望您的模型可编辑,使用StandardItemModel是否更容易?我只是好奇,因为我一直在使用QAbstractItemModel,并在考虑为什么应该或不应该切换到QStandardItemModel。 - eric
你如何使用抽象模型?它不能仅仅被使用。引用其文档:QAbstractItemModel类定义了项目模型必须使用的标准接口,以便能够与模型/视图架构中的其他组件进行交互。它不应该直接实例化。相反,您应该对其进行子类化以创建新模型。 引用结束。区别在于标准模型已经实现了一些显示标准数据的基本行为。对于更复杂的结构、过滤、组合或其他操作,您需要实现自己的逻辑,因此需要进行子类化。 - Kousalik
1
我使用AbstractItemModel来处理树形视图,所以我认为我理解你的意思,但是提问者可能不明白你所说的“模型逻辑”,这是你回答的概念支点。 - eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接