适配者模式-Qt Model的转接

来源:互联网 发布:cf免费刷火麒麟软件 编辑:程序博客网 时间:2024/06/06 00:29
  在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组合起来。这是不是又是另外一种设计模式呢?
0 0