清源游民 gameogre@gmail.com
為使用Models與views熱身
介紹
Qt提供了兩個標準的models:QStandardItemModel和QDirModel。QStandardItemModel是一個多用途的
model,可用于表示list,table,tree views所需要的各種不同的數(shù)據(jù)結構。這個model也持有數(shù)據(jù)。QDirModel
維護相關的目錄內容的信息,它本身不持有數(shù)據(jù),僅是對本地文件系統(tǒng)中的文件與目錄的描述。
QDirModel是一個現(xiàn)成的model,很容易進行配置以用于現(xiàn)存的數(shù)據(jù),使用這個model,可以很好地展示如何
給一個現(xiàn)成的view設定model,研究如何用model indexes來操縱數(shù)據(jù)。
model與views的搭配使用
QListView與QTreeView很適合與QDirModel搭配。下面的例子在tree view與list view顯示了相同的信息,QDirModel提供了目錄內容數(shù)據(jù)。這兩個Views共享用戶選擇,因此每個被選擇的項在每個view中都會被高亮。

先裝配出一個QDirModel以供使用,再創(chuàng)建views去顯示目錄的內容。這給我展示了使用model的最簡單的方式。
model的創(chuàng)建與使用都在main()函數(shù)中完成:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSplitter *splitter = new QSplitter;
QDirModel *model = new QDirModel;
//從缺省目錄創(chuàng)建數(shù)據(jù)
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中的數(shù)據(jù),只需要簡單地調用setModel(),并把目錄model作為參數(shù)傳遞
//setRootIndex()告訴views顯示哪個目錄的信息,這需要提供一個model index,然后用這個
//model index去model中去獲取數(shù)據(jù)
//index()這個函數(shù)是QDirModel特有的,通過把一個目錄做為參數(shù),得到了需要的model index
//其他的代碼只是窗口show出來,進入程序的事件循環(huán)就好了
splitter->setWindowTitle("Two views onto the same directory model");
splitter->show();
return app.exec();
}
上面的例子并沒有展示如何處理數(shù)據(jù)項的選擇,這包括很多細節(jié),以后會提到。
posted on 2007-06-15 17:04
清源游民 閱讀(4817)
評論(2) 編輯 收藏 引用 所屬分類:
Qt