13.7 便利视图类
本章前面几个节在使用Model/View框架时,模型对象和视图对象是相互独立的。我们可以直接定义一个模型对象(比如类QStandardIteModel或者其他便利模型类的对象),或者派生QAbstractListModel、QAbstractTableModel的子类,再定义子类的对象。然后,我们调用视图对象的成员函数setModel(),将一个视图对象和一个模型对象关联起来。
为了方便对Model/View框架的使用,Qt还提供了一组便利视图类。这些类在其内部定义了模型对象,并定义了一组简洁、易用的成员函数来操作模型对象中的数据项。同时,作为QAbstractItemView的子类,这些类能够显示内部的模型。由于这些类仅被用来显示内部的模型对象,它们的成员函数setModel()被声明为私有的,意味着我们无法使用这些类来显示外部的模型对象。另外,由于这些类内部的模型对象是私有的,其他视图对象也无法使用QAbstractItemModel定义的最小接口来访问它们,意味着我们无法令多个视图对象显示同一个模型。因此,便利视图类虽然易用,但不够灵活。
Qt提供了三个便利视图类。类QListWidget负责保存、显示具有列表结构的模型,类QTableWidget负责表格结构的模型,类QTreeWidget负责树状结构的模型。接下来的几节分别阐述这几个类的使用方式。