2013-07-10 30 views
0

我有一個Qt C++應用程序,它基於QAbstractItemModel使用幾個不同的模型(最終)。爲QAbstractItemModel項指定委託類

這些模型中的一些項目使用自定義委託來正確渲染它們,這些工作很好。

但是,我不確定如何指定這些委託類中的哪一個應該用於呈現數據。

目前,我在每個包含視圖的表單中調用QAbstractItemView :: setItemDelegateForColumn()。

這感覺非常笨拙,因爲它依賴於表單類,知道哪個委託應該用於每個模型中的每一列 - 如果將來發生變化,我必須更新每一個表單。

此外,在某些情況下,View會在需要不同委託的兩個不同模型之間切換,因此對於這些類型,窗體類也必須處理該切換。

有沒有更好的方法來做到這一點?

回答

1

模型不能知道表示,所以你應該處理視圖。您可以繼承涉及的視圖類(例如QTableView)和重新實現setModel虛擬方法。在你的實現中調用父類實現並根據指定的模型調整項目委託。把這個類的對象放在你的所有表單中。所以表格不會了解代表。我認爲這種方法與Model-View概念相一致。

0

AFAIK,沒有更好的辦法。 但是,我不是手動更新每個表單,而是使用一個枚舉來存放列索引,該列在模型和視圖中都用於檢索數據和應用委託。