委托(QItemDelegate/QStyledItemDelegate)的功能很強大,可以把控件設定成隻讀、表格的某一列設定成各種自己想要的控件。
Qt 提供了另外的基于元件的子類:QItemDelegate和 QStyledItemDelegate。預設的委托是 QStyledItemDelegate。二者的差別在于繪制和向視圖提供編輯器的方式。QStyledItemDelegate使用目前樣式繪制,并且能夠使用 Qt Style Sheet,是以我們推薦在自定義委托時,使用 QStyledItemDelegate作為基類。不過,除非自定義委托需要自己進行繪制,否則,二者的代碼其實是一樣的。
繼承 QStyledItemDelegate需要實作以下幾個函數:
createEditor():傳回一個元件。該元件會被作為使用者編輯資料時所使用的編輯器,從模型中接受資料,傳回使用者修改的資料。(//建立你編輯時候的控件)
setEditorData():提供上述元件在顯示時所需要的預設值。(//編輯的時候設定資料到上面建立的editor中)
updateEditorGeometry():確定上述元件作為編輯器時能夠完整地顯示出來。(//設定編輯控件的位置和大小。樣式等)
setModelData():傳回給模型使用者修改過的資料。(//編輯完成,儲存資料到data中)
官方例程:
\Qt5.12.9\Examples\Qt-5.12.9\widgets\itemviews
重點關注:
\Qt5.12.9\Examples\Qt-5.12.9\widgets\itemviews\spinboxdelegate
Qt豆子教程:
Qt學習之路(45): 自定義model之一 Qt學習之路(47): 自定義Model之三 Qt 學習之路 2(47):視圖選擇QTreeView使用總結
https://blog.csdn.net/dpsying/category_9274382.html http://www.qtcn.org/bbs/read-htm-tid-66006.html