• 介绍
Qt提供的标准模型中有两个是 QStandardItemModel 和 QFileSystemModel。 QStandardItemModel 是一个多用途的模型,可用来表示列表、表格和树视图所需要的多种不同的数据结构。这个模型也承载数据项目。 QFileSystemModel 是一个维护关于一个目录中的内容的信息的模型。这样的结果是,它自身并不承载任何的数据项目,而只是简单地表示本地文件系统上的文件和目录。
QFileSystemModel 提供一个现成的模型,可用来进行试验,而且可以很简单地配置使它使用已有的数据。通过使用这个模型,我们可以展示如何配置一个使用已有视图的模型,还能探索如何使用模型索引来操作数据。
QListView 和 QTreeView 两个类是最适合与 QFileSystemModel 一起使用的视图。下面展示的例子显示了一个目录在一个树视图以及同样的内容在一个相邻的列表视图中的情况。两个视图共享用户的选择内容,所以选中的项目在两个视图中都被高亮。
我们配置一个 QFileSystemModel 以让它马上就能使用,并且创建一些视图来显示一个目录中的内容。这展示了使用模型的最简单的方式。模型的创建和使用是在单个 main()函数中进行的:
int main(int argc, char *argv[])
{
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() 函数来过滤模型所维护的数据,传递的参数是该文件系统模型中针对当前目录的一个合适的模型索引。
所使用的 index()函数在这种情况下是 QFileSystemModel 独有的;我们传递给它一个目录,它返回一个模型索引。模型索引是在 模型类 一章介绍的。
函数中剩下的代码只是用来在一个分隔器中显示两个视图,并且启动程序的事件循环:
splitter->setWindowTitle("Two views onto the same file system model");
splitter->show();
return app.exec();
}
在上面的例子中,我们略去了如何处理项目的选择。这个主题在 处理视图项目中的选择 一章中详细讲解。在研究选择是如何处理的之前,你可以会发现阅读 模型类 一章是有用处的,它描述了模型/视图框架中用到的概念。
未知美人
Your opinions
HxLauncher: Launch Android applications by voice commands