设为首页 加入收藏

TOP

13.2.5 便利模型类
2013-10-07 15:19:58 来源: 作者: 【 】 浏览:64
Tags:13.2.5 便利 模型

13.2.5  便利模型类

对于一些特殊的数据集,Qt的Model/View框架提供了专门的模型类来处理它们。这些模型类虽然也是QAbstractItemModel的派生类,但是它们的使用方式非常简单,根本不需要程序员派生任何新的模型类,因此,我们将它们称为便利模型类(convenience model class)。

Qt提供了以下便利模型类:QStringListModel,处理数据项为字符串的列表;QFileSystemModel,处理具有树状层次结构的本地文件系统;QSQLQueryModel及其子类QSqlTableModel、QSqlRelationalTableModel,负责使用SQL语句访问数据库。由于最后这几个类涉及数据库操作,比较复杂,本节不讨论它们。下面我们仅阐述QStringListModel以及QFileSystemModel的用法。

类QStringListModel处理数据项为字符串的列表,其使用方式如代码段13 13所示。程序员不需要派生任何新模型类,只需要像行①那样,将一个QStringList对象作为参数,构造一个QStringListModel对象。由于新对象已经重载了必要的虚函数,实现了QAbstractItem Model定义的接口,因而立即可以和QListView对象协同工作。

代码段13 13,类QStringListModel的使用,取自z:\examples\mvc\QStringListModel_demo\main.cpp

  1. QStringList list;  
  2. list << "One" << "Two" << "Three" << "Four" << "Five";  
  3. QStringListModel listModel(list);       ①  
  4. QListView listView;  
  5. listView.setModel( &listModel );  
  6. listView.show();  

类QFileSystemModel负责处理具有树状层次结构的本地文件系统,其使用方式如代码段13 14所示。运行该例子,本地文件系统的信息会被显示在一个窗口中,所显示的信息包括文件的大小、类型、日期信息。每个目录可以被展开/折叠。

当该类的对象刚刚被创建时(行①),新对象并不会立即开始扫描本地文件系统。只有当该类的setRooPath()函数被调用时(行②),新对象才会启动一个独立的线程扫描整个文件系统,视图类才能够获得并显示文件系统的信息。setRootPath()函数的另外一个功能是创建一个监视器(是类QFileSystemWatcher的对象),对该函数参数所指定的路径进行监视。一旦该路经下的文件或者目录被删除、更改或者该路经下出现了新的文件、子目录,该监视器会通知模型类,模型类会通知视图类以更新显示。

代码段13 14,便利模型类QFileSystemModel的用法,取自z:\examples\mvc\file_system\main.cpp

  1. QFileSystemModel model;                         ①  
  2. model.setRootPath("C:/Documents and Settings"); ②  
  3. QTreeView treeView;  
  4. treeView.setModel(&model);  
  5. treeView.show();  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.2.3 派生新模型类(2) 下一篇13.2.4 QStandardItemModel(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: