Qt57 模型与视图设计模式3 关于数据属性,不同的视图显示同一个模型中的数据

学习自唐佐林老师的Qt


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

QStandardItemModel :储自定义数据的通用模型
QTableView 模型 提供了一个表视图的默认模型/视图实现。
QListView 模型 提供了一个列表或图标视图。
QTreeView 模型 提供了树视图的默认模型/视图实现。

Widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QTableView>
#include <QListView>
#include <QTreeView>
#include <QStandardItemModel>
class Widget : public QWidget
{
    Q_OBJECT
    
    //模型对象,储自定义数据的通用模型
    QStandardItemModel m_model;
    //QTableView 类提供了一个表视图的默认模型
    QTableView m_tableView;
    //QListView 模型 提供了一个列表或图标视图。
    QListView m_listView;
    //QTreeView 模型 提供了树视图的默认模型
    QTreeView m_treeView;
    void initModel();
    void initView();
public:
    Widget(QWidget *parent = 0);
    ~Widget();
};
#endif // WIDGET_H

Widget.cpp

#include "Widget.h"
#include <QStandardItem>
//Qt::WindowContextHelpButtonHint:窗口式样
Widget::Widget(QWidget *parent)
    : QWidget(parent, Qt::WindowContextHelpButtonHint)
{
    initModel();
    initView();
    //连接视图和模型  不同的视图显示同一个模型中的数据
    m_tableView.setModel(&m_model);
    m_listView.setModel(&m_model);
    m_treeView.setModel(&m_model);
}
//初始化模型
void Widget::initModel()
{
    //得到模型的虚拟根节点
    QStandardItem* root = m_model.invisibleRootItem();
    //从堆空间创建数据项目
    QStandardItem* itemA = new QStandardItem();
    QStandardItem* itemB = new QStandardItem();
    QStandardItem* itemC = new QStandardItem();
    QStandardItem* itemChild = new QStandardItem();
    //向数据项中添加数据
    /*
Qt::DisplayRole,作为直接可见的提示信息
Qt::ToolTipRole,悬浮框中补充型提示信息
Qt::WhatsThisRole,在状态中显示的提示性信息
    */
    itemA->setData("A", Qt::DisplayRole);
    itemA->setData("Tip A", Qt::ToolTipRole);
    itemA->setData("Help A", Qt::WhatsThisRole);
    itemB->setData("B", Qt::DisplayRole);
    itemB->setData("Tip B", Qt::ToolTipRole);
    itemC->setData("C", Qt::DisplayRole);
    itemC->setData("Tip C", Qt::ToolTipRole);
    itemC->setData("Help C", Qt::WhatsThisRole);
    itemChild->setData("Child", Qt::DisplayRole);
    itemChild->setData("Tip Child", Qt::ToolTipRole);
    itemChild->setData("Help Child", Qt::WhatsThisRole);
    //将itemChild数据项 放到 itemC数据项下面 0 0 的位置
    itemC->setChild(0, 0, itemChild);
    //用模型管理数据项,即将数据项放置到模型中。以三元组的方式组织数据,即可以看出每个数据项的索引,如itemA: 0 0 root
    root->setChild(0, 0, itemA);
    root->setChild(0, 1, itemB);
    root->setChild(1, 0, itemC);
}
//初始化视图
void Widget::initView()
{
    m_tableView.setParent(this);
    m_tableView.move(10, 10);
    m_tableView.resize(300, 100);
    m_listView.setParent(this);
    m_listView.move(10, 120);
    m_listView.resize(300, 100);
    m_treeView.setParent(this);
    m_treeView.move(10, 230);
    m_treeView.resize(300, 100);
}
Widget::~Widget()
{
    
}

main.cpp

#include <QtGui/QApplication>
#include "Widget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    
    return a.exec();
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/116423380