InterView 框架提供了可直接使用的模型类和视图类~~~~
实现一个简单的文件目录浏览器。附上如下代码
main.cpp
#include <QtWidgets/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;
//--新建对象
QTreeView tree;
QListView list;
QTableView table;
//--调用函数setModel() 设置 view对象的model为QDirModel对象的model
tree.setModel(&model);
list.setModel(&model);
table.setModel(&model);
//----QTree对象设置为多选
tree.setSelectionMode(QAbstractItemView :: MultiSelection);
//---QList对象设置与QTree对象使用相同的选择模型
list.setSelectionModel(tree.selectionModel());
//----QTable对象设置与QTree对象使用相同的选择模型
table.setSelectionModel(tree.selectionModel());
//---- 实现双击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)) );
//---实现窗口的分割
QSplitter *spliter = new QSplitter;
spliter->addWidget(&tree);
spliter->addWidget(&list);
spliter->addWidget(&table);
spliter->setWindowTitle("Model/View");
spliter->show();
return a.exec();
}
程序运行结果