地址薄示例显示了如何使用代理模型中数据的不同视图
此示例提供了一个地址薄,该地址薄允许联系人按字母顺序分为9组:ABC、DEF、GHI、...,VW表示。这是通过同一模型上使用多个视图实现的,每个视图都使用QSortFilterProxyModel类的实例进行过滤。
地址薄包含5个类:MainWindow、AddressWidget、TabModel、NewAddressTab和AddDialog。MainWindow类使用AddressWidget作为其中心小部件,并提交文件和工具菜单
AddressWidget类是一个QTabWidget子类,用于操作示例中显示的10个选项卡:9个字母组选项卡和NewAddressTab的一个实例。NewAddressTab类是QWidget的一个子类,仅在地址薄为空时使用,提示用户添加一些联系人。AddressWidget还与TableModel的一个实例交互,以向地址薄添加、编辑和删除条目。
TableModel是QAbstractTableModel的一个子类,它提供了访问数据的标准模型/视图API。它包含添加联系人列表。然而,这些数据并非在一个选项卡中全部可见。相反,QTableView用于根据字母表提供相同数据的9个不同视图
QSortFilterProxyModel是负责为每组联系人筛选联系人的类。每个代理模型都使用QReExp来过滤不属于相应字母组的联系人。AddDialog类用于从用户获取地址薄的信息。这个QDialog子类由NewAddressTab实例化以添加联系人,由AddressWidget实例化以添加和编辑联系人