2012-03-20 28 views
2

以前,我問過在不同的線程中運行模型和視圖,現在我明白它是如何構成問題的。爲了規避這個問題,我正在考慮重複數據。當工作者線程修改數據時,它會同時向GUI/Model線程發送更新,以使用相同的數據更新模型(因此,GUI /模型中存在精確的數據副本)。Qt模型 - 在單獨的線程中查看數據和模型

這聽起來像一個似是而非的方法嗎?其他方法是使用像QTableWidget等默認模型的直接窗口小部件,但然後我需要做很多默認情況下由QTableView支持的事情。

請建議!

鏈接到的其他問題:Design Pattern, Qt Model/View and multiple threads

+0

聽起來不錯。您可以使用排隊信號/插槽連接進行更新。除非您有大量更新或數據複製的成本非常高,否則我不會看到任何問題。如果工作人員不需要保留現有數據,則只需發送更新並忘記,以避免重複使用RAM。 – 2012-03-20 19:22:54

回答

0

有2種情況是可能的,但在這兩種情況下,如下所示,你需要至少2個對象:

數據對象

包含維護和操作數據所需的所有功能。數據存儲在指針中描述數據的對象中。這個數據結構我將留給你。

模型

包含指針到的數據的載體,其是當前正在顯示

方案1

QTableView數據是顯示只有在這種情況下,在一個QTimer信號或不同信號的數據存儲被鎖定並向量爲顯示模式被剪切並放入模型調用3210以使QTableView重新繪製新數據。

方案2

可以在QTableView通過自定義ItemEditor操縱數據。在這種情況下,具有QTableView的頂級窗口小部件在編輯完成時應該對數據對象QTableView以及ItemEditor發出的信號的信號處理程序有參考。這個信號處理程序將鎖定數據對象中的數據結構並更新它,一旦完成,它可能會剪切一個新的矢量來顯示,但更多的時候不是這樣。

如何設置鎖定,搜索等完全取決於您。