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. python编程实例-dmidecode系统信息搜集

    #!/usr/bin/env python from subprocess import PIPE,Popen def getDmi(): p = Popen(['dmidecode'],stdout ...

  2. git教程2-删除修改和文件

    文件处于三种状态: 1.位于工作区,未修改状态: 2.位于工作区,已经修改状态: 3.位于暂存区,已经暂存但未commit. 4.已经commit. 一.文件删除修改: 1.已经修改,但未add: g ...

  3. 树莓派视频监控 —— 使用 mjpg

    下载到树莓派本地: $ wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip $ unzip master.zip ...

  4. python whl包的安装

    1.首先安装PIP. https://pip.pypa.io/en/latest/installing.html#install-pip python get-pip.py 2.设置好环境变量: C: ...

  5. loj 6084.「美团 CodeM 资格赛」跳格子

    题目: link 题解: 尽量走\(a\). 只要保证走\(a\)后到达的点一定可以到终点就可以走. 所以从终点开始\(dfs\)出所有能够到达终点的点. 然后再从起点开始\(dfs\)路径即可. 如 ...

  6. 循环比赛日程表(match)(分治)

    [问题描述]     设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空.     输入:M     输 ...

  7. MMS(mongodb监控工具)

    今天好几个人问我如何查看mongodb的连接数,在mongo shell中执行: shard1:PRIMARY> db.serverStatus().connections { "cu ...

  8. unity shader 内置变量

    官网Manual:http://docs.unity3d.com/Manual/SL-UnityShaderVariables.html unity提供大量的内置变量,来供我们使用,主要包括一些 :矩 ...

  9. markdown的学习

    开始 语法 编辑器 sublime配置 图床 体验 开始 昨天晚上加上今天上午,折腾了算是一天的markdown编辑器. 原因是,为了写博客.在博客园写的东西,想法不到简书里,结果发现有部分乱码,以及 ...

  10. Java 字符串和时间互相转化 +时间戳

    一:字符串转换成date String datatime="2015-09-22 15:16:48"; SimpleDateFormat form = new SimpleDate ...