Qt之QDirModel

一、splitter提供了一個能夠動態調整控件大小的GUI函數

#include "widget.h"
#include <QApplication>
#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QItemSelectionModel>
#include <QFileSystemModel>

#include <QDirModel>
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QSplitter>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

 //   QDirModel model; //新建一個QDirModel對象,爲數據訪問作準備。QDirModel的插件還能夠設置過濾器
//QDirModel繼承自QAbstractModel類,爲訪問本地文件系統提供數據模型,它提供新建/刪除目錄等操做,此處
//只是用來顯示本地文件系統

    QFileSystemModel model;
    model.setRootPath(QDir::currentPath());
    //QFileSystemModel&QDirModel相同的效果,他們時用於獲取磁盤文件目錄。不一樣之處在於QFileSystemModel
    //使用單獨的線程,QDirModel不是單獨的線程。單獨的線程不會阻礙主線程,所以推薦QFileSystemModel

    //新建3種不一樣的View對象,以便文件系統能夠以三種不一樣的方式顯示
    QTreeView tree;
    QListView list;
    QTableView table;

    tree.setModel(&model);
    list.setModel(&model);
    table.setModel(&model);

    tree.setSelectionMode(QAbstractItemView::MultiSelection); //鼠標拖動連續多選
    list.setSelectionModel(tree.selectionModel());//list使用與tree相同的選擇模型
    table.setSelectionModel(tree.selectionModel());

    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&list,SLOT(setRootIndex(QModelIndex)));
    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&table,SLOT(setRootIndex(QModelIndex)));
    //雙擊tree時,list&table種顯示此選定目錄下的全部目錄和文件
    //也就是實現的功能是:在雙擊treeView的一個節點時,此節點就設置listView和tableView的根節點,由於treeView的
    //doubleClicked(QModelIndex)/Clicked(QModelIndex)信號會傳遞一個QModeIndex變量,是當前節點的模型索引,
    //將此模型索引傳遞給QListView&QTableView的槽函數setRootIndex,QListView&QTableView就會顯示此節點下的
    //目錄和文件

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

    return a.exec();
}
相關文章
相關標籤/搜索