QListView,QTreeView和 QStandardItemModel的简单使用 (转...

#include "testqstandarditemmodel.h"
#include <QtGui/QApplication>


//int main(int argc, char *argv[])
//{
// QApplication a(argc, argv);
// testQStandardItemModel w;
// w.show();
// return a.exec();
//}
#include <QApplication>
#include <QWidget>
#include<QTreeView>
#include<QDirModel>
#include<QHBoxLayout>
#include<QSplitter>
#include<QStringListModel>
#include<QListView>
#include<QStandardItemModel>


//model有以下几种:
// QStringListModel                   存储一组字符串
// QStandardItemModel            存储任意层次结构的数据
// QDirModel                             对文件系统进行封装
// QSqlQueryModel                   对SQL的查询结果集进行封装
// QSqlTableModel                    对SQL中的table进行封装
// QSqlRelationalTableModel    对带有foreign key的SQL table进行封装
// QSortFilterProxyModel         对另一个model执行sort and/or filter
//  model中存放的每项数据都有相应的"model index",由QModelIndex类来表示。
//  每个index由三个部分构成:row,column和表明所属model的指针。对于一维的list model,column部分永远为0。
//下面是两个例子(此实例可适当改动),介绍了QStringListModel,QStandardItemModel,QDirModel用QTreeView和QListView来显示的例子
//建一个cpp文件 拷贝以下代码即可


int main(int argc, char *argv[]) {
    
    QApplication app(argc, argv);


//******************示例1******************//    
//以下是QStandardItemModel的简单使用,只需替换view的model为qstmodel就可以看到效果
    QStandardItemModel *qstmodel=new QStandardItemModel();
    QStandardItem* item1    = new QStandardItem("item1");
    QStandardItem* item2    = new QStandardItem("item2");
    QStandardItem* item3    = new QStandardItem("item3");
    item1->appendRow(item2);
    qstmodel->appendRow(item1);
    qstmodel->appendRow(item3);




//******************示例2******************// 
//以下是StringListModel的示例,只需替换view的model为mod就可以看到效果,QListView也适用
    QStringList names;
    names<<"a"<<"b";
     QAbstractItemModel *mod=new QStringListModel(names);








//******************示例3******************// 
 //要注意的是,这里把StringListModel作为一个QAbstractItemModel来使用。这样我们就可以
  //使用model中的抽象接口,而且如果将来我们用别的model代替了当前这个model,这些代码也会照样工作。
  //QListView提供的列表视图足以满足当前这个model的需要了。
     QDirModel *model=new QDirModel();




       








QTreeView *view=new QTreeView;

//这里设置Model即可
view->setModel(model);
          view->setSelectionMode(QAbstractItemView::SingleSelection);
        view->setAutoFillBackground(true);
//设置列是否隐藏
//      view->setColumnHidden(1,true);
//      view->setColumnHidden(2,true);
//      view->setColumnHidden(3,true);
     //   widget->setAutoFillBackground(true);
        QHBoxLayout *blayout=new QHBoxLayout;
        blayout->addWidget(view);
        blayout->addStretch();
        QSplitter *splitter = new QSplitter;
        splitter->setLayout(blayout);
//splitter->addWidget(view);
        splitter->show();
    //     widget->show();
         return app.exec();
         


 //        QApplication app(argc, argv);
 //          QSplitter *splitter = new QSplitter;
 //    //从缺省目录创建数据


 //          QDirModel *model = new QDirModel;
 //    
 //          QTreeView *tree = new QTreeView(splitter);
 // //配置一个view去显示model中的数据,只需要简单地调用 setModel(),并把目录model作为参数传递
 //          tree->setModel(model);
 ////setRootIndex()告诉views显示哪个目录的信息,这需要提供一个model index,然后用这个
 //          //model index去model中去获取数据,这里默认的是当前路径
 //          tree->setRootIndex(model->index(QDir::currentPath()));
 //          QListView *list = new QListView(splitter);
 //          list->setModel(model);
 ////index()这个函数是QDirModel特有的,通过把一个目录做为参数,得到了需要的model index
 //          //其他的代码只是窗口show出来,进入程序的事件循环就好了
 //          list->setRootIndex(model->index(QDir::currentPath()));          
 //         
 //           splitter->setWindowTitle("Two views onto the same directory model");
 //          splitter->show();
 //          return app.exec();

}

示例1:


QListView,QTreeView和 QStandardItemModel的简单使用 (转..._第1张图片


示例2:

QListView,QTreeView和 QStandardItemModel的简单使用 (转..._第2张图片


示例3:

QListView,QTreeView和 QStandardItemModel的简单使用 (转..._第3张图片

你可能感兴趣的:(QListView,QTreeView和 QStandardItemModel的简单使用 (转...)