Qt Model/View学习

Posted manual-linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt Model/View学习相关的知识,希望对你有一定的参考价值。

Model和View的搭配使用
DEMO
pro文件

#-------------------------------------------------
#
# Project created by QtCreator 2018-10-13T14:45:13
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = ch801
TEMPLATE = app


SOURCES += main.cpp        mainwindow.cpp

HEADERS  += mainwindow.h

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

}

MainWindow::~MainWindow()
{

}

mian.cpp


#include "mainwindow.h"
#include <QApplication>
#include <QDirModel>
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QSplitter>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QDirModel model;  //先装出一个QDirModel以供使用
    /*新建三种不同的View对象,以便文件目录可以以三种不同的方式显示*/
    QTreeView tree;
    QTableView table;
    QListView list;

    //调用setModel()函数设置view对象的Model为QDirModel对象的model
    tree.setModel(&model);
    table.setModel(&model);
    list.setModel(&model);

    //设置QTreeView对象的方式为多选
    tree.setSelectionMode(QAbstractItemView::MultiSelection);
    //设置QListView和QTreeView使用相同的对象
    list.setSelectionModel(tree.selectionModel());
    //设置QTableView和QTreeView使用相同的对象
    table.setSelectionModel(tree.selectionModel());

    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),
                     &list,SLOT(setRootIndex(QModelIndex)));
    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),
                     &table,SLOT(setRootIndex(QModelIndex)));


    QSplitter *splitter=new QSplitter;
    splitter->addWidget(&table);
    splitter->addWidget(&tree);
    splitter->addWidget(&list);

    splitter->setWindowTitle(QObject::tr("Model/View"));
    splitter->show();

    return a.exec();
}
/*
 * 配置一个View去显示model中的数据,只需要简单地调用setModel(),并把目录
 * model作为参数传递。
 *
 * setRootIndex()告诉View显示那个目录的信息,这里需要提供一个model index
 * 然后用这个model index去model中获取数据
*/


以上是关于Qt Model/View学习的主要内容,如果未能解决你的问题,请参考以下文章

QT开发(三十六)——Model/View框架

5.Qt model view设计模式

Qt之Model/View架构

QT开发(三十八)——Model/View框架编程

QT Model View Controller 使用和认识

Qt之Model/View架构