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

} app

示例1: 函數



示例2: ui


示例3: 指針

相關文章
相關標籤/搜索