第10章 数据视图类(Item View Classes)

很多Qt应用程序都允许用户查找,查看,编辑一个数据集中的一个具体数据。这些数据可能存在在一个文件中,或者在数据库中,也可能来自于网络。Qt提供的数据视图类能很好的处理这些数据。

Qt早先的版本中,数据视图控件中保存了一个数据集中的所有数据。用户在这个控件中对数据进行查找,编辑等操作,有时候还要把数据写回到数据源中。这种处理方式很容易使用,但是当数据量很大时就会影响程序性能,也不能将一个数据源用多个不同的控件表示出来。

Smalltalk语言在处理大数据集时使用了一个更加灵活的方式:模型视图控制器(modelviewcontrolerMVC)。在MVC方式中,模型(model)代表数据集,负责数据的获取,查看及保存。尽管每种数据集的数据模型都不同,但是模型提供的API对视图都是一致的。视图(view)把得到的数据呈现给用户,如果数据量比较大时,用户能够查看的只是全部数据的一部分,即只是视图请求查看得那部分。控制器在用户和视图之间进行协调,把用户的动作转换为对数据的查看或者编辑等操作,然后视图在把数据的变化通知模型。

Figure 10.1. Qt's model/view architecture

 

Qt提供了一个类似MVC的模型/视图(model/view)模式。在Qt中,模型(model)和MVC中的模型功能一样。Qt没有使用MVC中的控制器(controller),而是使用了代理(delegate)。代理控制对对数据项的显示和编辑。Qt为每一种视图提供了一个缺省的代理。这个代理对于大多数应用程序已经足够了,一般我们不需要太多关注它。

使用Qt的模型/视图结构,我们只要用模型获取需要显示的数据,再把这些数据提供给视图就可以。在处理大量数据时,这种结构能够处理的更快,内存消耗也比较小,因为不再一次显示出所有的数据了。同时,一个模型能够用一个或者多个视图显示出来,用户能够用多种方式和数据进行交换。Qt能够自动对多个视图进行同步,将一个视图中的变化同步到其他视图中。使用模型视图结构的另一个好处是,如果我们想改变数据集,那么只需要改变模型就可以了,而不需要改变视图。

Figure 10.2. One model can serve multiple views

在很多情况下,应用程序只需要显示一小部分数据这时,可以使用Qt提供的方便的视图类(QListWidgetQTableWidgetQTreeWidget),直接在这些视图中填充数据。这些类和Qt的早前版本提供的类是一样的。把数据保存在数据项(item)中,如QTableWidget中包含了多个QTableWidgetItem。在内部,这些类使用自定义的模型,使视图能够显示这些项目

在数据量比较多时,复制所有的数据是不明智的。这种情况下,我们可以使用Qt提供的视图类(QListView,QTableViewQTreeView)与一个数据模型共同实现。例如,如果数据集在一个数据库中,我们可以使用QTableViewQSqlTableModel显示这些数据。

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值