您的位置:首页 > 健康 > 美食 > 黑马软件测试培训费用_企业门户网站源码_汕头网站排名_seo指搜索引擎

黑马软件测试培训费用_企业门户网站源码_汕头网站排名_seo指搜索引擎

2024/12/27 18:31:39 来源:https://blog.csdn.net/xuyonjin/article/details/142290588  浏览:    关键词:黑马软件测试培训费用_企业门户网站源码_汕头网站排名_seo指搜索引擎
黑马软件测试培训费用_企业门户网站源码_汕头网站排名_seo指搜索引擎

文章目录

  • Qt 模型视图(二):模型类`QAbstractItemModel`
    • 1.基本概念
      • 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,QColor,QPixmap界面上装饰数据,如图标
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()请求索引时为父项指定了无效的模型索引,则返回的索引将引用模型中的顶级项。
  • 角色区分与项目关联的不同类型的数据。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com