一、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(); }