《2022年QtModelView学习总结笔记 .pdf》由会员分享,可在线阅读,更多相关《2022年QtModelView学习总结笔记 .pdf(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学习必备欢迎下载Qt Model/View 学习笔记Qt Model/View 学习笔记(一)Qt 4推出了一组新的item view 类,它们使用model/view 结构来管理数据与表示层的关系。这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的 model 接口,使得更多的数据源可以被这些item view 使用。这里对model/view 的结构进行了描述,结构中的每个组件都进行了解释,给出了一些例子说明了提供的这些类如何使用。Model/View 结构Model-View-Controller(MVC),是从 Smalltalk 发展而来的一种设计
2、模式,常被用于构建用户界面。经典设计模式的著作中有这样的描述:MVC 由三种对象组成。Model 是应用程序对象,View 是它的屏幕表示,Controller 定义了用户界面如何对用户输入进行响应。在 MVC 之前,用户界面设计倾向于三者揉合在一起,MVC 对它们进行了解耦,提高了灵活性与重用性。假如把 view 与 controller 结合在一起,结果就是 model/view 结构。这个结构依然是把数据存储与数据表示进行了分离,它与MVC 都基于同样的思想,但它更简单一些。这种分离使得在几个不同的view 上显示同一个数据成为可能,也可以重新实现新的view,而不必改变底层的数据结构。
3、为了更灵活的对用户输入进行处理,引入了delegate这个概念。它的好处是,数据项的渲染与编程可以进行定制。如上图所示,model 与数据源通讯,并提供接口给结构中的别的组件使用。通讯的性质依赖于数据源的种类与model 实现的方式。view 从 model 获取 model indexes,后者是数据项的引用。通过把model indexes 提供给 model,view 可以从数据源中获取数据。在标准的 views 中,delegate 会对数据项进行渲染,当某个数据项被选中时,delegate学习必备欢迎下载通过 model indexes 与 model 直接进行交流。总的来说,mod
4、el/view 相关类可以被分成上面所提到的三组:models,views,delegates。这些组件通过抽象类来定义,它们提供了共同的接口,在某些情况下,还提供了缺省的实现。抽象类意味着需要子类化以提供完整的其他组件希望的功能。这也允许实现定制的组件。models,views,delegates 之间通过信号,槽机制来进行通讯:从 model 发出的信号通知view 数据源中的数据发生了改变。从 view 发出的信号提供了有关被显示的数据项与用户交互的信息。从 delegate发生的信号被用于在编辑时通知model 和 view 关于当前编辑器的状态信息。Models所有的 item mo
5、dels 都基于 QAbstractItemModel类,这个类定义了用于views 和 delegates访问数据的接口。数据本身不必存储在model,数据可被置于一个数据结构或另外的类,文件,数据库,或别的程序组件中。关于 model 的基本概念在Model Classes 部分中描述。QAbstractItemModel提供给数据一个接口,它非常灵活,基本满足views 的需要,无论数据用以下任何样的形式表现,如tables,lists,trees。然而,当你重新实现一个model 时,如果它基于table 或 list 形式的数据结构,最好从QAbstractListModel,QAb
6、stractTableModel开始做起,因为它们提供了适当的常规功能的缺省实现。这些类可以被子类化以支持特殊的定制需求。子类化model 的过程在Create New Model 部分讨论QT 提供了一些现成的models 用于处理数据项:QStringListModel 用于存储简单的QString 列表。QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。QDirModel 提供本地文件系统中的文件与目录信息。QSqlQueryModel,QSqlTableModel,QSqlRelationTableModel用来访问数据库。假如这些标准Model
7、不满足你的需要,你应该子类化QAbstractItemModel,QAbstractListModel或是QAbstractTableModel 来定制。Views不同的 view 都完整实现了各自的功能:QListView 把数据显示为一个列表,QTableView把 Model 中的数据以table 的形式表现,QTreeView 用具有层次结构的列表来显示model中的数据。这些类都基于QAbstractItemView 抽象基类,尽管这些类都是现成的,完整的进行了实现,但它们都可以用于子类化以便满足定制需求。Delegates文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6
8、 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G
9、6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6
10、G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F
11、6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2
12、F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H
13、2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10
14、H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4文档编码:CV10Y7D1R3G7 HQ5F10H2F6G6 ZM8B9B5D10I4学习必备欢迎下载QAbstractItemDelegate 是 model/view 架构中的用于delegate的抽象基类。缺省的
15、 delegate实现在 QItemDelegate 类中提供。它可以用于Qt 标准 views 的缺省delegate.排序在 model/view 架构中,有两种方法进行排序,选择哪种方法依赖于你的底层Model。假如你的 model 是可排序的,也就是它重新实现了QAbstractItemModel:sort()函数,QTableView 与 QTreeView 都提供了 API,允许你以编程的方式对Model 数据进行排序。另外,你也可以进行交互方式下的排序(例如,允许用户通过点击view 表头的方式对数据进行排序),可以这样做:把QHeaderView:sectionClicked(
16、)信号与 QTableView:sortByColum()槽或QTreeView:sortByColumn()槽进行联结就好了。另一种方法是,假如你的 model 没有提供需要的接口或是你想用list view 表示数据,可以用一个代理model 在用 view 表示数据之前对你的model 数据结构进行转换。便利类许多便利类都源于标准的view 类,它们方便了那些使用Qt 中基于项的view 与 table 类,它们不应该被子类化,它们只是为Qt 3的等价类提供一个熟悉的接口。这些类有QListWidget,QTreeWidget,QTableWidget,它们提供了如Qt 3中的 QLis
17、tBox,QlistView,QTable相似的行为。这些类比View 类缺少灵活性,不能用于任意的models,推介使用model/view的方法处理数据。Qt Model/View 学习笔记(二)介绍Qt 提供了两个标准的models:QStandardItemModel 和 QDirModel。QStandardItemModel是一个多用途的model,可用于表示list,table,tree views 所需要的各种不同的数据结构。这个model 也持有数据。QDirModel 维护相关的目录内容的信息,它本身不持有数据,仅是对本地文件系统中的文件与目录的描述。QDirModel 是
18、一个现成的model,很容易进行配置以用于现存的数据,使用这个model,可以很好地展示如何给一个现成的view 设定 model,研究如何用model indexes 来操纵数据。model 与 views 的搭配使用QListView 与 QTreeView 很适合与QDirModel 搭配。下面的例子在tree view 与 list view显示了相同的信息,QDirModel提供了目录内容数据。这两个 Views 共享用户选择,因此每个被选择的项在每个view 中都会被高亮。文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z
19、1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1
20、C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G
21、3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P
22、7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4
23、H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z
24、1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z1
25、0P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3学习必备欢迎下载先装配出一个QDirModel 以供使用,再创建 views 去显示目录的内容。这给我展示了使用 model 的最简单的方式。model 的创建与使用都在main()函数中完成:int main(int argc,char*argv)QApplication app(argc,argv);QSplitter*splitter=new QSplitter;Q
26、DirModel*model=new QDirModel;/从缺省目录创建数据QTreeView*tree=new QTreeView(splitter);tree-setModel(model);tree-setRootIndex(model-index(QDir:currentPath();QListView*list=new QListView(splitter);list-setModel(model);list-setRootIndex(model-index(QDir:currentPath();/配置一个view 去显示 model 中的数据,只需要简单地调用setModel()
27、,并把目录model作为参数传递/setRootIndex()告诉 views 显示哪个目录的信息,这需要提供一个model index,然后用这个/model index 去 model 中去获取数据/index()这个函数是QDirModel 特有的,通过把一个目录做为参数,得到了需要的model index/其他的代码只是窗口show 出来,进入程序的事件循环就好了splitter-setWindowTitle(Two views onto the same directory model);splitter-show();return app.exec();文档编码:CX7Z10P7Z
28、1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1
29、C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G
30、3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P
31、7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4
32、H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z
33、1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z1
34、0P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3学习必备欢迎下载Qt Model/View 学习笔记(三)Model 类基本概念在 model/view 构架中,model 为 view 和 delegates使用数据提供了标准接口。在Qt 中,标准接口 QAbstractItemModel类中被定义。不管数据在底层以何种数据结构存储,Q
35、AabstractItemModel 的子类会以层次结构的形式来表示数据,结构中包含了数据项表。我们按这种约定来访问model 中的数据项,但这个约定不会对如何显示这些数据有任何限制。数据发生改变时,model 通过信号槽机制来通知关联的views。Model Indexes 为了使数据存储与数据访问分开,引入了model index 的概念。通过model index,可以引用 model 中的数据项,Views 和 delegates都使用 indexes 来访问数据项,然后再显示出来。因此,只有 model 需要了解如何获取数据,被 model 管理的数据类型可以非常广泛地被定义。Mod
36、el indexes 包含一个指向创建它们的model 的指针,这会在配合多个model 工作时避免混乱。QAbstractItemModel*model=index.model();model indexes 提供了对一项数据信息的临时引用,通过它可以访问或是修改model 中的数据。既然model 有时会重新组织内部的数据结构,这时model indexes 便会失效,因此不应该保存临时的model indexes。假如需要一个对数据信息的长期的引用,那么应该创建一个 persistent model index。这个引用会保持更新。临时的model indexes 由 QModelInd
37、ex 提供,而具有持久能力的model indexes 则由 QPersistentModelIndex 提供。在获取对应一个数据项的 model index 时,需要考虑有关于model 的三个属性:行数,列数,父项的 model index。行与列文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z1
38、0P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6
39、M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U
40、1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7
41、Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7
42、Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F
43、4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3学习必备欢迎
44、下载在最基本的形式中,一个 model 可作为一个简单的表来访问,每个数据项由行,列数来定位。这必不意味着底层的数据用数组结构来存储。行和列的使用仅仅是一种约定,它允许组件之间相互通讯。可以通过指定model 中的行列数来获取任一项数据,可以得到与数据项一一对应的那个index。QModelIndex index=model-index(row,column,.);Model 为简单的,单级的数据结构如list 与 tables提供了接口,它们如上面代码所显示的那样,不再需要别的信息被提供。当我们在获取一个model index 时,我们需要提供另外的信息。上图代表一个基本的table mod
45、el,它的每一项用一对行列数来定位。通过行列数,可以获取代表一个数据项的model index.QModelIndex indexA=model-index(0,0,QModelIndex();QModelIndex indexB=model-index(1,1,QModelIndex();QModelIndex indexC=model-index(2,1,QModelIndex();一个 model 的顶级项,由 QModelIndex()取得,它们上式被用作父项。父项类似于表的接口在搭配使用table 或 list view 时理想的,这种行列系统与view 显示的方式是确切匹配的。然则
46、,像 tree views 这种结构需要model 提供更为灵活的接口来访问数据项。每个数据项可能是别的项的父项,上级的项可以获取下级项的列表。当获取 model 中数据项的index 时,我们必须指定关于数据项的父项的信息。在model外部,引用一个数据项的唯一方法就是通过model index,因此需要在求取model index 时指定父项的信息。文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G
47、3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P
48、7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4
49、H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z
50、1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z10P7Z1L5 HE7Y6M4H1C2 ZR5F4U1Z1G3文档编码:CX7Z1