zoukankan      html  css  js  c++  java
  • 第五十五课、模型视图设计模式(上)------------------狄泰软件学院

    一、模型视图设计模式

    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
    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()
    {
        
    }
    MainWindow.cpp
    #include <QtGui/QApplication>
    #include "MainWindow.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        
        return a.exec();
    }
    main.cpp

    二、小结

    (1)、Qt中内置的支持模型视图的开发方式

    (2)、模型用于组织数据源不关心数据的显示方式

    (3)、视图用于定义数据的显示方式不关心数据的组织方式

    (4)、Qt中的模型必须为每一个数据提供独一无二的索引

    (5)、Qt中的视图通过索引访问模型中的数据

  • 相关阅读:
    conan本地安装包
    Python PIL 怎么知道写入图片格式的kb大小
    怎么对C++枚举(不是类)里面的东西进行随机
    当双方Visual studio windows SDK不一样的时候的解决办法
    不小心使用vcpkg之后再使用conan,一直报链接错误
    关于obj文件的理解
    卸载VS2015之后,安装VS2017出错
    性状、生成器、闭包、OPcache【Modern PHP】
    docker容器修改hosts文件,重启失效问题解决
    微信公众号-模板消息通用接口封装
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6523358.html
Copyright © 2011-2022 走看看