您的位置:首页 > 编程语言 > Qt开发

Qt Model/View 学习笔记 (二)

2014-08-28 15:06 239 查看
Qt提供了两个标准的models:QStandardItemModel和QDirModel。QStandardItemModel是一个多用途的

model,可用于表示list,table,tree views所需要的各种不同的数据结构。这个model也持有数据。QDirModel

维护相关的目录内容的信息,它本身不持有数据,仅是对本地文件系统中的文件与目录的描述。

QDirModel是一个现成的model,很容易进行配置以用于现存的数据,使用这个model,可以很好地展示如何

给一个现成的view设定model,研究如何用model indexes来操纵数据。

model与views的搭配使用

QListView与QTreeView很适合与QDirModel搭配。下面的例子在tree view与list view显示了相同的信息,QDirModel提供了目录内容数据。这两个Views共享用户选择,因此每个被选择的项在每个view中都会被高亮。



先装配出一个QDirModel以供使用,再创建views去显示目录的内容。这给我展示了使用model的最简单的方式。

model的创建与使用都在main()函数中完成:

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

QSplitter *splitter = new QSplitter;

QDirModel *model = new QDirModel;

//从缺省目录创建数据

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()));

//配置一个view去显示model中的数据,只需要简单地调用setModel(),并把目录model作为参数传递

//setRootIndex()告诉views显示哪个目录的信息,这需要提供一个model index,然后用这个

//model index去model中去获取数据

//index()这个函数是QDirModel特有的,通过把一个目录做为参数,得到了需要的model index

//其他的代码只是窗口show出来,进入程序的事件循环就好了

splitter->setWindowTitle("Two views onto the same directory model");

splitter->show();

return app.exec();

}

上面的例子并没有展示如何处理数据项的选择,这包括很多细节,以后会提到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: