Basic Concepts
     在Modle/View 结构中,View从Model中提取数据,并显示给用户。View显示数据的方式不一定与Model中数据排列方式相同,也可能与底层数据结构完全不同。
     通过QAbstractItemView提供标准的视图接口,QAbstractModelView提供标准的模型接口。视图通常管理从模型提取数据的总体布局,他们可以自己呈现个别数据,或者使用Delegate来处理渲染和编辑。
     除了呈现数据,View处理Item之间的导航和选择。视图还实现基本的用户界面功能,如上下文菜单和拖放。视图可以为Item提供默认编辑功能,也可以与Delegate一起提供自定义编辑功能。
     视图可以在没有Model的情况下构建,但必须提供展示的信息。View通过Selection跟踪用户选择的Item,Selection可以被每个View单独维持也可以被很多View共享。
     一些视图,例如QListView和QTableView,把Header作为Item展示出来。View和Header通常使用同一个Model,他们使用QAbastractItemModel::headerData函数从模型中获得数据,通常以标签的形式显示标题,新的标题可以从QHeaderView子类化,提供View专用的标签。
 
Using an existing view
     QT提供3种ready-to-use视图。QListView可以把Model中的Item显示为列表,或者以经典的图标视图显示。QTreeView可以把Model中Item显示为有层次结构的列表,允许深层嵌套的结构以紧凑的方式显示。QTableView以表的形式显示模型中的Item。
 
    
以上的标准视图对于大多数应用程序来说是足够了,它们提供基本的编辑功能,也可以根据更专业的用户界面需求进行定制。
 
Handling selections of items
    
 
  以上图片显示2中不用的View使用同一个Model,每个View包含多个可选择的Item。尽管2个View显示的数据一致,但是每个视图都维护自己内部的selection model。在某些情况下这是有用的,但是在另外的情况下,共享selection model是更好的选择。
     视图中的Item selection机制由QItemSelectionModel提供。所有的标准视图都有默认的selection model。可以通过selectionModel()函数获得选择模型,也可以通过setSelectionModel()函数设置选择选择模型。当一个Model提供给多个View显示时,设置selection model是一个很好的选择。
     一般来说,除非你子类化Model或者View,你不用手动来操作selection中的内容。
      
  secondTableView->setSelectionModel(firstTableView->selectionModel());
 
一个简单的QListView例子:
#include <QApplication>

#include <QStringList>
#include <QStringListModel>
#include <QListView> int main(int argc, char *argv[])
{
QApplication a(argc, argv); QStringList list;
list << "one" << "two" << "three"; QStringListModel *model = new QStringListModel(list);
QListView *view = new QListView; view->setModel(model);
view->show(); return a.exec();
}

效果如下:

        

8.View类的更多相关文章

  1. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  2. Thinkphp源码分析系列(九)–视图view类

    视图类view主要用于页面内容的输出,模板调用等,用在控制器类中,可以使得控制器类把表现和数据结合起来.下面我们来看一下执行流程. 首先,在控制器类中保持着一个view类的对象实例,只要继承自控制器父 ...

  3. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  4. PureMVC(JS版)源码解析(九):View类

    在讲解View类之前,我们先回顾一下PureMVC的模块划分:      在PureMVC中M.V.C三部分由三个单例类管理,分别是Model/View/Controller.PureMVC中另外一个 ...

  5. 《Qt编程的艺术》——8.2.1 在Designer中使用View类

    不幸的是,QDirModel有一个严重的限制:因为view不响应鼠标操作,我们不得不自己建立这些功能.除此之外,每个view中,用户都一次只能选择一个元素.如果你想要允许同时选择多个项目,你也必须自己 ...

  6. 【Android Training UI】创建自定义Views(Lesson 1 - 创建一个View类)

    发布在我的网站 http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-1 ...

  7. 安卓开发28:自定义View类

    自定义View类 通过自定义View类,可以自定义复杂的,按照自己需求的控件. 一个简单的例子 mainActivity.java 这个里面就是最普通的代码,但是给自定义的控件加上了一个onclick ...

  8. view类的XML属性

    属性名称 对应方法 描述 android:background setBackgroundResource(int) 设置背景 android:clickable setClickable(boole ...

  9. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

  10. Android的View类介绍-android的学习之旅(十三)

    view概述 android绝大部分UI组件都放在android.view和android.widght包中,android的虽有UI组件都继承了View类. View类还有一个非常重要的子类:Vie ...

随机推荐

  1. 剑指Offer-翻转单词顺序

    题目描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符串的顺序不变.例如输入字符串:"I am a student",则输出"student a am I&qu ...

  2. 使用Python和OpenCV通过网址URL获取图片

    在OpenCV中通过图片的URL地址获取图片: # -*- coding: utf-8 -*- import numpy as np import urllib import cv2 # URL到图片 ...

  3. mxnet(gluon)—— 模型、数据集、损失函数、优化子等类、接口大全

    1. 数据集 dataset_train = gluon.data.ArrayDataset(X_train, y_train) data_iter = gluon.data.DataLoader(d ...

  4. redis实战之事务与持久化

    1. 事务描述 (1)什么是事务 事务,就是把一堆事情绑在一起,按顺序的执行,都成功了才算完成,否则恢复之前的样子 事务必须服从ACID原则,ACID原则分别是原子性(atomicity).一致性(c ...

  5. Eureka详解

    该章节紧接第三章,主要是对一些理论上的指导,帮助更好的理解服务治理. 基础架构 eureka服务治理的基础架构包含三个要素: 1)服务注册中心:eureka提供服务端,提供服务的注册与发现功能. 注: ...

  6. 机器学习:SVM(目标函数推导:Hard Margin SVM、Soft Margin SVM)

    一.Hard Margin SVM SVM 的思想,最终用数学表达出来,就是在优化一个有条件的目标函数: 此为 Hard Margin SVM,一切的前提都是样本类型线性可分: 1)思想 SVM 算法 ...

  7. canvas渐变

    代码: 1 /** 2 * Created by Administrator on 2016/1/29. 3 */ 4 function draw(id){ 5 var canvas = docume ...

  8. 杂项-Grunt:grunt build 打包和常见错误

    ylbtech-杂项-Grunt:grunt build 打包和常见错误 1. 安装.打包返回顶部 1. npm WARN deprecated coffee-script@: CoffeeScrip ...

  9. sql server将字符串转换为 uniqueidentifier 时失败

    sql server查询中出现 将字符串转换为 uniqueidentifier 时失败异常 原因为id设置为uniqueidentifier 字段,在where查询时需要做转换cast(id as ...

  10. Intellij IDEA 发布后的项目在哪里

    Intellij IDEA 中使用 tomcat 并发布项目后,项目并没有出现在在 webapps 文件夹中,如果没有手动修改过部署目录的话,idea的真实部署目录为 File---->Proj ...