8.View类

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();
}

 

效果如下:

        

posted @ 2017-05-28 13:24  billxyd  阅读(301)  评论(0编辑  收藏  举报