2012-12-13 100 views
1

我使用PyQt4的,並已創建基於QAbstractItemModel分層模型,這自然形成剛性層次結構:顯示細節

- Study 
    - Recording 
    - Config 

study項是根項目然後QTreeView會顯示其下的記錄項目列表,以及它們的嵌套配置項目。

我想在QTreeView中選擇它們時,顯示和編輯有關另一個窗口小部件中各個配置項的額外元信息。根據配置項的類型,要顯示的元字段的數量會有所不同,因此我試圖在QTableView中顯示它們。

QDataWidgetMapper類看起來有助於這種類型的功能,但我一直無法找到顯示一次顯示多個字段的小部件的任何示例(即非行編輯,組合框,複選框等) 。代理模型似乎又是一條潛在的途徑,但我不確定如何根據這種方式選擇顯示模型的子集。

任何人都有我如何使用模型/視圖框架來實現我的目標的建議?

+0

[Qt參考文檔](http://doc.qt.digia.com/4.7-snapshot/classes.html) – 2012-12-13 18:14:53

回答

1

我最終想出了一個使用多種代理模型的解決方案。

我在模型中添加了額外的列,使用QSortFilterProxyModel的子類過濾掉前三個包含信息以顯示在QTreeView中。

然後將選擇模型鏈接到爲每個模型項設置「selected」屬性的方法。一個代理模型inspired by this blog post首先將該樹平整爲相同順序的類似表格的模型。然後,另一個代理模型根據選擇屬性過濾行,併爲上述擴展集中的非空列創建另一個過濾器。

這會產生一個帶有所需元信息的單行*表格。要將其顯示爲列,可以使用從QAbstractProxyModel派生的其他代理模型,通過將行映射到列進行轉置,反之亦然。

*這是一行,因爲在給定的時間只允許選擇一個項目。