适配者模式-Qt Model的转接

  在Qt中,通过写model, 让TableView呈现不同的样式。有时候会遇到比较蛋疼的局面。之前写的一个Model很适合,但是不支树形显示。现在的需求就是要显示树形,其它的跟之前的一样。这种情况下,是重写一个呢,还是想想别的办法。
    有两种思路可以考虑,一个是派生,一个是适配。派生的一个Model,并要显示树形的话,很难实现,毕竟要重写index, parent等方法。用适配的方式来实现则相对容易实现。
    在计算机编程中,适配器模式(有时候也称为包装样式或包装),将一个类的接口适配成用户需要的接口,一个适配允许通常因为接口不一致而不能正常在一起工作的类在一起。
    思路如下:
    1)定义一个Model, 内部有一个成员是TestModel(适配的model)。构造的同时,构造成员。
    2)定义一个数据结构Node。用于构造树形。数据结构的成员设计上要倾向于好转换。如可以在树形结构构造的时候,有一个成员专门用于记录它是第几个(在平的情况下)。
    3)QModelIndex dataIndex(QModelIndex index) const;这个方法用于index的转换。执行适配。
    4)data, setData等方法里先通过dataindex转换一下。取值调成员TestModel的data,setData等方法。
思路很简单,主要是觉得这个跟适配者模式很像,而且很方便的能实现不同的model之间的转换或组合。
    同样的思路还可以通过一个model, 内部组合多个model的方式来实现比较复杂的功能。如打开另存框左侧显示本地文件还有其它的一些东西的,可 以参考这样的实现。本地文件用Qt自带的fileModel就可以,如果还想显示别的东西,就可以通过一个model, 把两个或多个model组合起来。这是不是又是另外一种设计模式呢?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值