2017-01-16 375 views
0

我的應用程序是一個工具庫管理器。它有一個包含列表和工具列表的樹形視圖。它也有一個表格顯示工具列表。QtAbstractItemModel。一起使用QtreeView和QtableView

當我在樹狀列表點擊,我想表明兒童列表中的tableview。當我點擊樹中的單個工具時,我切換小工具並顯示工具的編輯窗體。

如何限制的tableview只在樹視圖中選擇的節點的孩子?

我的數據模型是一個自定義qAbstractItemModel。

回答

-1

我不知道這是否是一個完整的答案,以我自己的問題,但我更接近。在tableview中,我可以調用setRootIndex()並從qTreeView傳入當前項目。這樣做只顯示錶格列表中當前樹項目的子項。

對於我來說,它仍然顯示這兩個工具和孩子名單,我想過濾的,但我認爲這是一個不同的問題。

+0

請將您的意見放在答案下,而不是創建一個單獨的答案。謝謝。 – NameRakes

+0

我的評論不是關於另一個答案。這是一個尚未討論的新答案。 – sliptonic

+0

明白了。在樹視圖中,只有在選定項目下的孩子才能在表格視圖中顯示和顯示,您有什麼策略? downvoted因爲沒有示例來展示如何進行操作的 – NameRakes

0

我有一個類似的情況(不完全一樣!)作爲你的。在分享我的經驗之前,我的假設是您有一個由組成您的列表/工具的項目組成的數據庫。

一個可能的解決方案是創建兩個定製機型,一個樹視圖(比方說,MyTreeViewModel -> QAbstractItemModel,與QTreeView相關的),一個用於表視圖(MyTableViewModel -> QAbstractItemModel,與QTableView相關)。

這兩個自定義模型應由同一代理與數據庫一起處理。 關鍵區別是樹視圖模型適用於整個數據庫,而表視圖模型僅包含一個子集,也就是主列表中所選項的子項。把它看作完全映射與數據庫的部分映射。

當用戶點擊樹形視圖中頂部節點列表時,您可以發出一個信號,該信號可由MyTableViewModel拾取,僅填充子元素,並由QTableView顯示。

因爲同一代理服務這兩種模式,你應該能夠保持數據的完整性,在這個意義上改變一個模型的基礎數據應該反映在其他模型。這個解決方案對我的應用程序非常有效。希望這也適用於你!

+0

@sliptonic不同的視圖(表,樹等)都是**類型的視圖。在你的情況下,你已經將所有數據*映射到兩個不同的視圖。有*無法視圖可以過濾數據*。我的解決方案通過創建一個過濾數據的模型來解決這個問題 - 然後'QTableView'顯示減少的數據。 QT的模型/視圖/代表架構允許我們這樣做。如果我的解決方案不正確,或者我對您的問題的理解不正確,或者沒有提出正確的問題。 – NameRakes

+0

如果您發現篩選視圖中顯示的數據比創建單獨模型更簡單,請將其發佈到此處。謝謝。 – NameRakes