wordpress建站什么意思,高密做网站的价格,微营销方案,客户制作网站时的问题文章目录 Qt 模型视图(二)#xff1a;模型类QAbstractItemModel1.基本概念1.1.模型的基本结构1.2.模型索引1.3.行号和列号1.4.父项1.5.项的角色1.6.总结 Qt 模型视图(二)#xff1a;模型类QAbstractItemModel
模型/视图结构是一种将数据存储和界面展示分离的编程方法。模… 文章目录 Qt 模型视图(二)模型类QAbstractItemModel1.基本概念1.1.模型的基本结构1.2.模型索引1.3.行号和列号1.4.父项1.5.项的角色1.6.总结 Qt 模型视图(二)模型类QAbstractItemModel
模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据视图组件显示模型中的数据在视图组件里修改的数据会被自动保存到模型里。模型的数据来源可以是内存中的字符串列表或二维表格型数据也可以是数据库中的数据表一种模型可以用不同的视图组件来显示数据所以模型/视图结构是一种高效、灵活的编程结构。
1.基本概念
在模型/视图架构中模型提供了一个标准接口视图和委托使用该接口访问数据。在Qt中标准接口由QAbstractItemModel类定义。无论数据项如何存储在任何底层数据结构中QAbstractItemModel的所有子类都将数据表示为包含表项的层次结构。视图使用此约定访问模型中的数据项但它们向用户呈现此信息的方式不受限制。模型还通过信号和插槽机制将任何有关数据更改的信息通知附加的视图。
1.1.模型的基本结构
有3种常见的展示形式分别是列表模型( list model )表格模型( table model )和树状模型( tree model )。不管模型的表现形式如何模型中存储数据的基本单元都是项 (item)每个项有一个行号和一个列号还有一个父项(parent item)。3个模型都有一个隐藏的根项(root item)列表模型的存储结构就是一列表格模型的存储结构是规则的二维数组树状模型的项可以有子项结构更为复杂一些。
图 1 模型的3中展示形式
1.2.模型索引
为了确保数据的展示与数据的存储方式分离模型中引入了模型索引(model index)的概念。通过模型能访问的每个项都有一个模型索引视图组件和代理都通过模型索引来请求数据。这样只有模型需要知道怎样获取数据被模型管理的数据可以广泛地被定义。模型索引提供访问数据的临时指针用于通过模型提取或修改数据。
1.3.行号和列号
模型的基本形式是用行和列定义的表格数据但这并不意味着底层的数据是用二维数组存储的使用行和列只是为了组件之间交互方便。一个模型索引包含行号和列号。要获得一个模型索引必须提供 3 个参数行号、列号、父项的模型索引。例如对于图 1中的表格模型中的 3 个项 A、B、C获取其模型索引的示意代码如下 QModelIndex indexA model-index(0, 0, QModelIndex()); QModelIndex indexB model-index(1, 1, QModelIndex()); QModelIndex indexC model-index(2, 1, QModelIndex());
1.4.父项
对于列表模型和表格模型每个项的父项都是顶层项用QModelIndex()表示而树状模型情况比较复杂项一般称为节点。例如对于图 1中的树状模型中的 3 个项 A、B、C获取其模型索引的示意代码如下
QModelIndex indexA model-index(0, 0, QModelIndex()); QModelIndex indexB model-index(1, 1, indexA ); QModelIndex indexC model-index(2, 1, QModelIndex());
其中节点A和节点C的父节点是顶层节点节点B的父节点是节点A。
1.5.项的角色
模型中的项能够有不同的角色可以在不同的情况提供不同的数据。角色由枚举类Qt::ItemDataRole定义。
**表 1 枚举类Qt::ItemDataRole**常用的一些枚举值及其含义
枚举值值角色数据类型含义Qt::DisplayRole0QString界面上显示的字符串Qt::DecorationRole1QIcon,QColorQPixmap界面上装饰数据如图标Qt::EditRole2QString界面上编辑器中的数据Qt::ToolTipRole3QString项的toolTip字符串Qt::StatusTipRole4QString项的statusTip字符串Qt::WhatsThisRole5QString这是什么’模式下显示的数据Qt::FontRole6QFont项的字体Qt::TextAlignmentRole7Qt::Alignment项的对齐方式Qt::BackgroundRole8QBrush项的背景色Qt::ForegroundRole9QBrush项的前景色如文字颜色Qt::CheckStateRole10Qt::CheckState项的复选状态Qt::AccessibleTextRole11QString扩展的可访问文本Qt::AccessibleDescriptionRole12QString出于无障碍目的对项的描述Qt::SizeHintRole13QSize提供给视图的项的大小提示Qt::InitialSortOrderRole14Qt::SortOrder标题视图的初始排序顺序Qt::UserRole0x0100QVanriant自定义的用户数据
1.6.总结
模型索引以独立于任何底层数据结构的方式提供有关模型提供的项的位置的视图和委托信息。项目由其行号和列号以及其父项目的模型索引引用。模型索引由模型根据其他组件如视图和委托的要求构建。如果在使用index请求索引时为父项指定了有效的模型索引则返回的索引将引用模型中该父项下的项。所获得的索引是指该项的子项。如果在使用index请求索引时为父项指定了无效的模型索引则返回的索引将引用模型中的顶级项。角色区分与项目关联的不同类型的数据。