Qt Model/View 學習筆記 (二)

本文來源:清源遊民

爲使用Models與views熱身

介紹
Qt提供了兩個標準的models:QStandardItemModelQDirModelQStandardItemModel是一個多用途的
model,可用於表示list,table,tree views所需要的各種不同的數據結構。這個model也持有數據。QDirModel
維護相關的目錄內容的信息,它本身不持有數據,僅是對本地文件系統中的文件與目錄的描述。
QDirModel是一個現成的model,很容易進行配置以用於現存的數據,使用這個model,可以很好地展示如何
給一個現成的view設定model,研究如何用model indexes來操縱數據。

model與views的搭配使用

QListViewQTreeView很適合與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();
 }

上面的例子並沒有展示如何處理數據項的選擇,這包括很多細節,以後會提到。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章