zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Qt“模型/视图”实例

Qt实例 模型 视图
2023-09-14 09:05:11 时间

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

1、效果展示

2、具体代码

#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::SingleSelection​​​、​​QAbstractItemView::NoSelection​​​、​​QAbstractItemView::ContiguousSelection​​​、​​QAbstractItemView::ExtendedSelection​​​和​​QAbstractItemView::MultiSelection​​​。

(d):​​​list.setSelectionModel(tree.selectionModel());​​​设置QListView对象与QTreeView对象使用相同的模型

(e):​​​table.setSelectionModel(tree.selectionModel());​​​设置QTableView对象与QTreeView对象使用相同的模型

(f):为了实现双击QTreeView对象中的某个目录时,QListView对象和QTableView对象中显示此选定目录下的所有文件和目录,需要连接QTreeView对象的​​​doubleClicked()​​​信号与QListView对象和QTableView对象的​​setRootIndex()​​槽函数。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓