简述
下面的内容介绍了如何在Qt中使用模型/视图框架。
Qt中包含的两个模型
Qt提供的两个标准模型是QStandardIteModel和QFileSystemModel。QStandardItemModel是一个多功能模型,可用于表示列表,表格和树视图所需的各种不同数据结构。该模型还保存数据项。 QFileSystemModel是用于维护有关目录内容信息的模型。因此,它不会存储项目数据,只是简单地表示本地系统的文件和目录。
在现有的模型上使用视图
QListView和QTreeView是最适合与QFileSystemModel一起使用的视图。下面提供的示例在树形视图中显示目录的内容,并在列表视图中显示相同的信息。这些视图共享用户的选择。
我们设置了一个QFileSystemModel以便可以使用,并且创建了一些视图来显示目录的内容。这个例子展示了模型/视图架构的最简单使用方法。
QApplication app(argc, argv);
QSplitter *splitter = new QSplitter;
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
这个模型被建立以使用来自特定文件系统的数据。调用setRootPath()来选定一个目录节点作为根目录。
我们建立两个视图类,这样就能以两种不同的方法来检查模型中的项目。
QTreeView *tree = new QTreeView(splitter);
tree->setModel(model);
tree->setRootIndex(model->index(QDir::currentPath()));
QListView *list = new QListView(splitter);
list->setModel(model);
list->setRootIndex(model->index(QDir::currentPath()));
视图的构造方式和其它控件相同。建立视图以显示模型中的项目仅需使用目录模型作为参数来调用setModel()函数即可。我们通过在每个视图上调用setRootIndex()函数来过滤模型提供的数据,并从文件系统模型中为当前目录传递合适的模型索引。
函数的剩下部分是使用splitter控件来显示视图
splitter->setWindowTitle("Two views onto the same file system model");
splitter->show();
总结
上面通过一个最简单的例子展示了模型/视图框架的基本用法。其中没有涉及到代理,这是因为视图会在其内部提供一个默认代理。这应该算是模型/视图编程整个流程的最后一步,But,这是我们学习模型/视图编程的起点。后面还要学习如何设计模型、视图、代理。
引用
[1] Qt助手