学习QT之“模型/视图”实例

InterView框架提供了一些可以直接使用的模型类和视图类,如QStandardItemModel类、QDirModel类、QStringListModel类,以及QColumnView类QHeaderView类QListView类、QTableView类和QTreeView类等。


一、效果展示

在这里插入图片描述


二、具体代码

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QDirModel model; //(a)
    /*新建三种不同的View对象,以便文件目录可以以三种不同的方式显示*/
    QTreeView tree;
    QListView list;
    QTableView table;
    tree.setModel(&model);  //(b)
    list.setModel(&model);
    table.setModel(&model);
    tree.setSelectionMode(QAbstractItemView::MultiSelection);  //(c)
    list.setSelectionModel(tree.selectionModel());  //(d)
    table.setSelectionModel(tree.selectionModel());  //(e)
    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&list,SLOT(setRootIndex(QModelIndex)));  //(f)
    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&table,SLOT(setRootIndex(QModelIndex)));  

    QSplitter *splitter = new QSplitter;
    splitter->addWidget(&tree);
    splitter->addWidget(&list);
    splitter->addWidget(&table);
    splitter->setWindowTitle(QObject::tr("Model/View"));
    splitter->show();

    return a.exec();
}

注意
(a):QDirModel model;新建一个QDirModel对象,为数据访问做准备。QDirModel的创建还可以设置过滤器,即只有符合条件的文件或目录才可被访问。
(b):tree.setModel(&model);调用setModel()函数设置View对象的Model为QDirModel对象的model。
©:tree.setSelectionMode(QAbstractItemView::MultiSelection); 设置QTreeView对象的选择方式为多选。
QAbstractItemView提供五种选择模式,即QAbstractItemView::SingleSelectionQAbstractItemView::NoSelectionQAbstractItemView::ContiguousSelectionQAbstractItemView::ExtendedSelectionQAbstractItemView::MultiSelection
(d):list.setSelectionModel(tree.selectionModel());设置QListView对象与QTreeView对象使用相同的模型
(e):table.setSelectionModel(tree.selectionModel());设置QTableView对象与QTreeView对象使用相同的模型
(f):为了实现双击QTreeView对象中的某个目录时,QListView对象和QTableView对象中显示此选定目录下的所有文件和目录,需要连接QTreeView对象的doubleClicked()信号与QListView对象和QTableView对象的setRootIndex()槽函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值