[转]QT Model View框架学习(二)
介绍
Qt提供了两个标准的models:QStandardItemModel 和QDirModel 。
QStandardItemModel 是一个多用途的model,可用于表示list,table,tree views所需要的各种不同的数据结构。这个model也持有数据。
QDirModel 维护相关的目录内容的信息,它本身不持有数据,仅是对本地文件系统中的文件与目录的描述。
QDirModel 是一个现成的model,很容易进行配置以用于现存的数据,使用这个model,可以很好地展示如何给一个现成的view设定model,研究如何用model indexes来操纵数据。
QDirModel 是一个现成的model,很容易进行配置以用于现存的数据,使用这个model,可以很好地展示如何给一个现成的view设定model,研究如何用model indexes来操纵数据。
model与views的搭配使用
QListView 与QTreeView 很适合与QDirModel 搭配。
下面的例子在tree view与list view显示了相同的信息,QDirModel提供了目录内容数据。这两个Views共享用户选择,因此每个被选择的项在每个view中都会被高亮。
![](//images0.cnblogs.com/blog/175022/201305/29102136-6cebb3e78b3d4667a4e4fae9c5897142.png)
先装配出一个QDirModel 以供使用,再创建views去显示目录的内容。这给我展示了使用model的最简单的方式。
model的创建与使用都在main()函数中完成:
![](http://images0.cnblogs.com/blog/175022/201305/29102136-6cebb3e78b3d4667a4e4fae9c5897142.png)
先装配出一个QDirModel 以供使用,再创建views去显示目录的内容。这给我展示了使用model的最简单的方式。
model的创建与使用都在main()函数中完成:
1 int main(int argc, char *argv[]) 2 { 3 QApplication app(argc, argv); 4 QSplitter *splitter = new QSplitter ; 5 QDirModel *model = new QDirModel ; 6 //从缺省目录创建数据 7 QTreeView *tree = new QTreeView (splitter); 8 tree->setModel (model); 9 tree->setRootIndex (model->index (QDir::currentPath())); 10 11 QListView *list = new QListView (splitter); 12 list->setModel (model); 13 list->setRootIndex (model->index (QDir::currentPath())); 14 //配置一个view去显示model中的数据,只需要简单地调用setModel(),并把目录model作为参数传递 15 //setRootIndex()告诉views显示哪个目录的信息,这需要提供一个model index,然后用这个 16 //model index去model中去获取数据 17 //index()这个函数是QDirModel特有的,通过把一个目录做为参数,得到了需要的model index 18 //其他的代码只是窗口show出来,进入程序的事件循环就好了 19 splitter->setWindowTitle("Two views onto the same directory model"); 20 splitter->show (); 21 return app.exec (); 22 }