一、模型视图设计模式
1、模型视图设计模式的核心思想
(1)、模型(数据)与视图(显示)相分离
(2)、模型对外提供标准接口存取数据(不关心数据如何显示)
(3)、视图自定义数据的显示模式(不关心数据如何组织存储)
2、模型视图模式的直观理解
3、模型视图的工作机制
(1)、当数据发生改变时:模型发出信号通知视图
(2)、当用户与视图进行交互时:视图发出信号提供交互信息
4、Qt中的模型类层次结构
5、Qt中的视图类层次结构
6、模型为数据提供统一的访问方式
(1)、Qt中,不管模型以什么结构组织数据,都必须为每一个数据提供独一无二的索引
(2)、视图通过索引访问模型中的具体数据
7、模型视图编程示例
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QFileSystemModel> #include <QTreeView> #include <QtGui/QMainWindow> class MainWindow : public QMainWindow { Q_OBJECT QFileSystemModel m_fileModel; QTreeView m_treeView; public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; #endif // MAINWINDOW_H
#include "MainWindow.h" #include <QDir> //1.定义视图、模型对象 //2.设置视图对象相关属性(大小位置等) //3.设置模型取数据的位置(文件系统如此大,要给模型指定一个地方来取数据) //4.连接模型与视图 //5.视图通过模型提供的索引去取数据来从根部开始显示 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { m_treeView.setParent(this); m_treeView.resize(600,300); m_treeView.move(10,10); m_fileModel.setRootPath(QDir::currentPath()); m_treeView.setModel(&m_fileModel); m_treeView.setRootIndex(m_fileModel.index(QDir::currentPath())); } MainWindow::~MainWindow() { }
#include <QtGui/QApplication> #include "MainWindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
二、小结
(1)、Qt中内置的支持模型视图的开发方式
(2)、模型用于组织数据源,不关心数据的显示方式
(3)、视图用于定义数据的显示方式,不关心数据的组织方式
(4)、Qt中的模型必须为每一个数据提供独一无二的索引
(5)、Qt中的视图通过索引访问模型中的数据