码迷,mamicode.com
首页 > 其他好文 > 详细

Qt--模式视图设计

时间:2019-08-16 17:06:38      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:view   cti   dir   显示   其他   cpp   his   rac   filesyste   

一.模型视图设计模式

A.模型视图设计模式
1.模型与视图相分离
2.模型对外提供标准接口存取数据(不关心数据如何显示)
3.视图自定义数据的显示方式(不关系数据如何组织存储)
模型视图模式的直观理解
技术图片
模型视图的工作机制
1.当数据发生改变时--模型发出信号通知视图
2.当用户与视图进行交互时--视图发出信号提供交互信息
Qt中的模型类层次结构
技术图片
QAbstractItemModel类为项模型类提供抽象接口.QAbstractItemModel类定义项模型必须使用的标准接口,以便能够与模型/视图体系结构中的其他组件进行互操作。它不应该直接实例化。相反,您应该将其子类化以创建新模型。QAbstractItemModel类是Model / View Classes之一,是Qt模型/视图框架的一部分。它可以用作QML中项视图元素的基础数据模型或Qt Widgets模块中的项视图类。如果您需要一个模型用于项目视图,例如QML的List View元素或C ++小部件QListView或QTableView,您应该考虑子类化QAbstractListModel或QAbstractTableModel而不是此类。底层数据模型作为表层次结构公开给视图和委托。如果不使用层次结构,则模型是行和列的简单表。每个项目都有一个由QModelIndex指定的唯一索引
Qt中视图类的层次结构
技术图片
QAbstractItemView类是使用QAbstractItemModel的每个标准视图的基类。QAbstractItemView是一个抽象类,本身不能实例化。?它提供了一个标准接口,通过信号和插槽机制与模型进行互操作,使子类能够随着模型的变化保持最新。?此类为键盘和鼠标导航,视口滚动,项目编辑和选择提供标准支持。
模型视图编程示例
技术图片
树状视图与模型的代码示例

Widget.cpp
#include "Widget.h"
#include <QDir>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    m_treeView.setParent(this);
    m_treeView.move(10, 10);
    m_treeView.resize(500, 300);

    m_fsModel.setRootPath(QDir::currentPath());//当前路径下

    m_treeView.setModel(&m_fsModel);//模型与视图的连接

    m_treeView.setRootIndex(m_fsModel.index(QDir::currentPath()));
}

Widget::~Widget()
{

}

Widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFileSystemModel>
#include <QTreeView>

class Widget : public QWidget
{
    Q_OBJECT

    QFileSystemModel m_fsModel;
    QTreeView m_treeView;//树状视图
public:
    Widget(QWidget *parent = 0);
    ~Widget();
};

#endif // WIDGET_H

运行的结构如图所示
技术图片
B.模型视图设计模式
1.模型定义标准接口(成员函数)对数据进行访问
2.视图通过标准接口获取数据并定义显示方式
3.模型使用信号与槽的机制通知视图数据变化
4.模型中的数据都是以层次结构表示的
C.模型中的索引
1.模型索引时数据与视图分离的重要机制
2.模型中的数据使用唯一的索引来访问
3.QModelIndex是Qt中的模型索引类--包含具体数据的访问途径,包含一个指向模型的指针
技术图片
索引中的行与列--线性模型可以使用(row,column)作为数据索引技术图片
模型中数据索引的通用方式--三元组(row,column,parent)
技术图片
模型中数据索引的通用方式
技术图片
D.Q:不同的视图如何显示同一个模型中的数据?
Qt中标准模型定义

技术图片
数据角色的概念
1.模型中的数据在视图中的用途可能不同
2.模型必须为数据设置特定数据角色
3.数据角色用于提示视图数据的作用
4.数据角色是不同视图以统一风格显示数据的标准
Qt中的数据角色定义
技术图片
数据角色的意义--定义了数据在特定系统下的标准用途,不同的视图可以通过相同标准显示数据

Qt--模式视图设计

标签:view   cti   dir   显示   其他   cpp   his   rac   filesyste   

原文地址:https://blog.51cto.com/13475106/2430093

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!