我有一個自定義QSortFilterProxyModel只顯示錶中的某些行和列。我也有一個自定義QItemDelegate來控制如何繪製表中的某些值。我只是將委託應用到需要它的列,問題似乎是,當我有代理模型隱藏某些列時,它會弄亂委託。與QSortFilterProxyModel使用自定義QItemDelegate
例如,假設我有列AG和我申請我的自定義委託給列F
A B C D E F G
-------------------
o o o o o X o
o o o o o X o
o o o o o X o
如果我的代理模型沒有顯示列B,我代表最終得到應用到G列,而不是。
A C D E F G
----------------
o o o o o X
o o o o o X
o o o o o X
我已經能夠通過隱藏在視圖中的列,而不是在代理模型來解決這一問題,通過調用
table->setColumnHidden(B, true);
我假設的作品,但是是唯一的解?這似乎是錯誤的,委託和代理模型類不能更好地在一起工作,就像你可以使用一個或另一個,但不是在同一個模型上都很好。
據我所知,它按預期工作:項目委託被應用到視圖的列,這應該是模型不可知的。此外,您的模型*是代理模型,因此它正在應用於正確的列。 – cbuchart
我想你是對的@cbuchart。我想這是有道理的,當我在視圖上調用setItemDelegateForColumn時,它將是我指定的視圖列,而不是模型的列。如果您知道您使用的代理模式可能會更改列號,我認爲您的建議答案將是一個有效的解決方法。 – Moohasha
您可以執行qobject_cast來檢查模型是否爲代理模型。 – cbuchart