Qt Model/View使用模型/视图(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fanyun_01/article/details/79526863

         Qt提供了两个标准的模型:QStandardItemModel和QFileSystemModel。
         QStandardItemModel是一个多用途的模型,可用于表示list,table,tree views所需要的各种不同的数据结构。这个模型也持有数据。
       QFileSystemModel维护相关的目录内容的信息,它本身不持有数据,仅是对本地文件系统中的文件与目录的描述。QFileSystemModel是一个现成的模型,很容易进行配置以利用现有的数据。使用这个模型,可以很好地展示如何给一个现成的视图设定模型,研究如何用model indexes来操纵数据。
model与views的搭配使用:

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

 QApplication app(argc, argv);  
   QSplitter *splitter = new QSplitter;  
   /*此模型model的创建是为了使用特定文件系统的数据。setRootPath()调用告诉驱动此文件系统的model将数据呈现给哪些视图(Views)*/  
   QFileSystemModel *model = new QFileSystemModel;  
   model->setRootPath(QDir::currentPath());  
   /*创建两个视图(Views),分别是TreeView和ListView*/  
   /*配置一个View以显示模型model中的数据,只需简单调用setModel()函数,并将目录model作为参数。setRootIndex()告诉views显示哪个目录的信息,这需要提供一个model index,然后用这个model index去model中去获取数据。index()函数是QFileSystemModel特有的,通过把一个目录做为参数,得到了需要的model index。*/  
   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()));  
   /*将所有的widgets置于splitter中*/  
   splitter->setWindowTitle("Two views onto the same file system model");  
   splitter->show();  
   return app.exec();  

显示效果图如图1所示:

         

猜你喜欢

转载自blog.csdn.net/fanyun_01/article/details/79526863
今日推荐