首页 > 其他 > 详细

Qt Model/view 小实例 文件目录浏览器

时间:2021-07-16 00:02:12      阅读:26      评论:0      收藏:0      [点我收藏+]

1. 文件目录浏览器

直接在main.cpp文件中添加下列代码

#include "mainwindow.h"

#include <QApplication>
#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QItemSelectionModel>

#include <QDirModel>
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QSplitter>

// MV model view
int main(int argc, char* argv[]) {
    QApplication a(argc, argv);
    //首先创建一个文件模型
    QDirModel model;
    //三种显示模式
    QTreeView tree;
    QListView list;
    QTableView table;
    // 设置view对象的model
    tree.setModel(&model);
    list.setModel(&model);
    table.setModel(&model);
    tree.setSelectionMode(QAbstractItemView::SingleSelection);   //单选
//  tree.setSelectionMode(QAbstractItemView::MultiSelection);   //多选
    list.setSelectionMode(QAbstractItemView::MultiSelection);   //多选
//  table.setSelectionMode(tree.selectionModel());   //多选
    table.setSelectionMode(QAbstractItemView::MultiSelection);   //多选
    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(&tree);
    splitter->addWidget(&list);
    splitter->addWidget(&table);
    splitter->setWindowTitle(QObject::tr("Model/View"));
    splitter->show();
    return a.exec();
}

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

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

其中 setRootIndex的介绍如下
技术分享图片

QModelIndex的介绍如下
技术分享图片
QModelIndex类用于定位数据模型中的数据。

doubleClicked信号如下,这个信号不是在tree里面的而是QAbstractItemView里面的
QAbstractItemView::doubleClicked(const QModelIndex &index)

This signal is emitted when a mouse button is double-clicked. The item the mouse was double-clicked on is specified by index. The signal is only emitted when the index is valid.

这个信号在双击鼠标按钮时发出。鼠标双击的项目由index指定。该信号只在索引有效时发出。

2.运行效果

技术分享图片

Qt Model/view 小实例 文件目录浏览器

原文:https://www.cnblogs.com/wanghongyang/p/15017253.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!