2013-10-31 68 views
1

到目前爲止,我一直在使用這個類,但是我覺得我沒有很好的概念理解我在做什麼。我錯過了一些關於Qt模型/視圖體系結構的基礎知識,這阻礙了我充分利用它。 Qt文件似乎並沒有解決我的問題。我很多缺乏理解似乎都圍繞着data()方法。我不明白QAbstractItemModel是如何工作的

例如: 1)文檔沒有正確解釋(或者我錯過了)data()方法是什麼以及如何正確使用它。當我的模型有任何改變時,我只是有一種模糊的想法,認爲它是某種回調或插槽功能。但從結構上講,它的作用是什麼?爲什麼需要它,解決什麼問題?

2)說到角色,數據方法中角色參數的要點是什麼。同樣,爲什麼設計者選擇以這種方式實現data()方法?

我希望我的問題不太抽象。如果是這樣的話,可能是因爲我沒有完全理解我對模型/視圖體系結構不瞭解。因此不太清楚如何制定我的問題。

無論如何,任何對這些概念有一些體面的理解的人都歡迎加入。另外如果有人知道其他地方的解釋比Qt文檔更好,那也會很棒。

非常感謝任何反饋。

回答

1

作爲功能名稱暗示的`化QAbstractItemModel ::數據()」是用於提供應由視圖進行可視化的信息。視圖不需要一次性緩存所有數據(在某些情況下有數千個元素),而是一旦應該在屏幕上顯示,就會逐漸從該函數中查詢它。

當我談論數據時,我認爲它可能是項目的文本,文本顏色,背景顏色,圖標等。所有這些類型的數據由Qt::ItemDataRole枚舉表示,數據本身表示爲QVariant

例如,如果您有樹形視圖和相應的模型。當你向下滾動樹時,它應該畫20個節點。樹視圖調用模型的數據()函數爲這20個節點中的每一個繪製文本,圖標,背景等。

最後,爲了更好地理解角色。 Qt不是在模型中具有textData(),colorData(),iconData()函數,而是提供了一個函數data(),它能夠有條件地選擇根據角色返回哪些數據。這是非常方便的設計明智的。

相關問題