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

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