清源游民 gameogre@gmail.com
為使用Models與views熱身
介紹
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();
}
上面的例子并沒有展示如何處理數據項的選擇,這包括很多細節,以后會提到。
posted on 2007-06-15 17:04
清源游民 閱讀(4807)
評論(2) 編輯 收藏 引用 所屬分類:
Qt