• 7020阅读
  • 3回复

[提问]Qt助手里,关于model/view有一段描述, 费解 [复制链接]

上一主题 下一主题
离线liuxu_lx7
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-26
在Qt助手中, 【Model/View Programming】篇文章的【Convenience classes】段落,如下:


Convenience classes


A number of convenience classes are derived from the standard view classes for the benefit of applications that rely on Qt's item-based item view and table classes. They are not intended to be subclassed, but simply exist to provide a familiar interface to the equivalent classes in Qt 3. Examples of such classes include QListWidget, QTreeWidget, andQTableWidget; these provide similar behavior to the QListBox, QListView, and QTable classes in Qt 3.
These classes are less flexible than the view classes, and cannot be used with arbitrary models. We recommend that you use a model/view approach to handling data in item views unless you strongly need an item-based set of classes.
If you wish to take advantage of the features provided by the model/view approach while still using an item-based interface, consider using view classes, such as QListView, QTableView, and QTreeView with QStandardItemModel.

红色字体的2段,没有理解。 自己觉得应该如下翻译,但感觉不对。

红色第一段:使用像QListWidget这样的类不能使用随便的model(即: mode 和 view 被严格的捆绑使用)。建议使用 model / view (这里特指的是哪种形式? Q*Model + Q*View 的形式?)存储数据, 除非你强烈要求使用item-based方式(这里特指Q*Widget这种mode/view套装模式?)
红色第二段:如果你希望创建高效的model/view并且仍然使用item-base接口,你可以考虑使用 Q*View+QStandardItemModel方式。(猜测, 这么说Q*View和Q*Widget就都属于item-base模式, 那上段文字中的 mode/view 到底指什么呢?)


离线ppdayz

只看该作者 1楼 发表于: 2011-07-26
回 楼主(liuxu_lx7) 的帖子
像QT的Q*Widget,是已经封装好的model/view,是比较通用的控件,而且你注意了没有,Q*Widget的setmodel函数是private的
而Q*View的是要继承了然后重写的,也就是说是自己专用的控件
virtual void  setModel ( QAbstractItemModel * model )
离线alexltr

只看该作者 2楼 发表于: 2011-07-26
我是这样翻译的,不知对不对,仅供参考:

为了使应用程序可以使用qt基于项的(item-based)视图和表格类,从标准的视图类中衍生出了一些项视图的简便类。他们的目的不是用于子类化的,他们的存在只是为了给Qt3中对等的类提供一个类似的接口。这些类包括QListWidget, QTreeWidget, 和QTableWidget,他们分别跟Qt3中的QListBox, QListView, and QTable提供相似的行为。

这些类没有视图类那么灵活,也不能用于各种模型。除非你强烈需要一套基于项的简便类,否则我们还是建议你在处理项视图数据时使用模型/视图的方法。
如果你希望利用模型/视图方法所提供的特性,同时又想使用一个基于项的接口,那就考虑把QStandardItemModel类与视图类如QListView, QTableView, 和 QTreeView等搭配使用。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线liuxu_lx7
只看该作者 3楼 发表于: 2011-07-29
回 2楼(alexltr) 的帖子
非常感谢,解惑了~

回复晚了,
快速回复
限100 字节
 
上一个 下一个