Qt 模型/视图编程设计模式是不是受限?

Posted

技术标签:

【中文标题】Qt 模型/视图编程设计模式是不是受限?【英文标题】:Is Qt Model/View programming design pattern limited?Qt 模型/视图编程设计模式是否受限? 【发布时间】:2012-04-28 01:00:13 【问题描述】:

我正在阅读有关Model/View programming 设计模式的信息,但我不明白如何定义模型。我的模型应该继承自 QAbstractItemModel?如果是,我认为它非常有限,因为我的模型类不能从另一个模型类继承。

【问题讨论】:

严格来说没有真正需要从另一个类继承。通常,composition 是 prefered over inheritance。 问题是我使用 ActiveRecord 作为 ORM,所以我的应用程序中的所有模型类都继承自 ActiveRecord::Base。 【参考方案1】:

C++ 具有多重继承,因此从技术上讲,您的模型可以从 Qt 模型基类和其他东西派生。 话虽如此,多重继承相当棘手(无论如何对我来说),组合更容易正确。

将 ORM 模型类与 Qt 的“合并”的一种方法是创建一个 Qt 模型类,其中包含一个(或多个)ORM 模型作为成员。 Qt 模型本质上会将所有请求代理到您的 ORM 模型。 Qt 模型只是一个“适配器”。这使您的 ORM 代码独立于 GUI 工具包,这通常很好。

请务必查看 Model subclassing reference 以了解 Qt 方面的内容。

【讨论】:

以上是关于Qt 模型/视图编程设计模式是不是受限?的主要内容,如果未能解决你的问题,请参考以下文章

Qt--模式视图设计

26.QT-模型视图之自定义委托

第61课 模型视图中的委托(上)

第55课 模型视图设计模式

第57课 模型视图设计模式(下)

QT 模型/视图编程:我应该如何检索上下文菜单选项的额外数据?