2017-06-23 54 views
1

也許我不明白這裏的一個基本概念,但是我怎樣才能將樹視圖鏈接到使用Qt的表視圖?例如,我有一個treeView及其中的項目列表。我還有一個tableView模型/視圖實現,以便來自不同文件的數據填充表格。假設每個文件的文件名(在這種情況下,所有文件都是CSV)在treeView中列爲項目。我想要做的就是鏈接treeView中的.csv項目,以顯示在treeView中選擇的.csv文件的解析內容。我想要這些數據在tableView中顯示。我已經分別實施了樹和表 - 他們工作 - 我只是不知道如何將它們連接在一起。在我選擇樹視圖中的相應項目後,如何才能使我的解析數據顯示在表格中?將樹視圖鏈接到表視圖? [Qt]

這似乎是一個非常基本的概念,但我只是不知道要尋找什麼來解決問題。

回答

1

Qt項目視圖系統不會自動給你這個功能,但很容易得到你想要使用信號/插槽連接的行爲。

特別是,你想要的(據我所知)是每當用戶在QTreeView中選擇不同的行時,QTableView應該用QTreeView中的行所代表的.CSV文件的內容重新填充自身。

假設我正確地理解了您的用例,您需要將您的QTreeView的SelectionModel對象的selectionChanged()方法連接到某個將執行表重新填充操作的插槽。即是這樣的:

connect(myTreeWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), someObjectInYourProgram, SLOT(RepopulateTableView())); 

...,然後讓RepopulateTableView()槽法看,目前在QTreeView則選擇的對象哪一行(S)和重新填充基於它們的內容。 (注意:如果需要,可以直接從selectionChanged()信號中獲取參數並使用它們,但是我經常發現使用指針檢查QTreeView的selectionModel對象會更有用是單獨提供的,因爲從這種方式RepopulateTableView()可以更容易地從除此信號之外的其他上下文中調用)

+0

這真的幫助我實現了我一直在尋找的東西。謝謝。作爲後續工作,我想知道'RepopulateTableView()'函數是如何在設計上看起來的。具體來說,如果我在'QTreeView'中有幾個文件條目,每個條目都鏈接到不同的表模型?也就是說,每個文件的數據應該有自己的模型來保存數據,還是錯誤的方法呢? – orbit

+1

我認爲這樣做會很好;或者您也可以擁有一個表格模型對象,只要選擇一個新文件,您就會更改其行爲。無論哪種方式可以工作AFAIK。 –