2010-08-30 80 views
1

我真的不知道,如果這是有道理的,但是這是我要做的:一個QStandardItemModel針對不同QTableView中,泛型和具體意見

我做我的遊戲在QT編輯器。目前我正在使用QStandardItemModel來存儲我的所有場景項目。這些項目有名稱,位置,紋理(紋理矢量是一個自定義類),動畫(動畫矢量)等。

我覺得有用的是有一個項目的行因爲我可以添加或刪除這些項目很容易,除了讓他們在一個地方,所以改變這個模型應該會影響整個應用程序。

現在,我正在嘗試針對特定項目的「紋理」做特定的視圖。這個QTableView應該顯示紋理的名稱,路徑等等。所以,基本上我怎樣才能在通用模型中獲取紋理矢量,並在不用另一個模型的情況下填充另一個視圖?

回答

2

您將需要使用QSortFilterProxy模型。像這樣設置一個。

QTableView *tableView = new QTableView; 
MyItemModel *sourceModel = new MyItemModel(this); 
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); 

proxyModel->setSourceModel(sourceModel); 
proxyModel->setFilterKeyColumn(column_#_to_filter_by); 
proxyModel->setFilterRegExp(a_regex_that_matches_the_item_you_want_to_display); 
tableView->setModel(proxyModel); 

您應該可以使用一個模型和不同的代理來設置不同的視圖。

+0

感謝代碼,它現在看起來非常清晰,正是我所期待的。但是我還有一個問題,如果我想爲另一個視圖抓特定的列,該怎麼辦?假設你有一個人的模型,其中有姓名,姓氏,年齡,性別。而且你不能只看到姓名和姓氏。該代理看起來像它假裝只有一列。 – 2010-09-04 03:06:24

+0

在這種情況下,您可以在模型上設置一個視圖,併爲每個不感興趣的列調用setColumnHidden(column_num,true)。 – 2010-09-04 04:32:44

+0

我發現了另一個解決方案。可以對QSortFilterProxyModel進行子類化,並覆蓋要將false返回到不想顯示的列的filterAcceptsColumn方法。再次感謝。 – 2010-09-05 15:47:16

相關問題