2010-04-22 105 views
1

有沒有人有一個使用QWidget作爲QAbstractTableModel中的編輯器的例子?
我有一列,編輯時應創建一個QCombobox的選擇列表。QAbstractTableModel中的自定義編輯器

該文檔似乎建議我需要編寫一個QAbstractItemDelegate和一個自定義的繪製函數,但似乎矯枉過正只是在Qt :: EditRole中彈出一個標準的QCombobox。

注 - 組合框的內容對於每一行都是相同的,只有當有人點擊單元格時才需要顯示它。

我知道這應該很簡單,但我不能得到它的工作。對於基於QTableWidget的表格很容易 - 但我需要它用於非常大的數據表。

回答

4

該文檔似乎表明我需要編寫一個QAbstractItemDelegate和定製油漆功能,但似乎矯枉過正簡單地彈出使用Qt :: EditRole標準QCombobox。

你不需要那麼遠。一種方法是子類QStyledItemDelegate,然後覆蓋createEditor(),以便它返回預先填充的組合框。如果你使用基本的Qt值類型,它的setEditorDatasetModelData函數可能已經足夠了。

如果您需要更多通用的,適用於多種不同型號的東西,您可以創建QItemEditorFactory,將編輯器與正確的類型相關聯。這也適用於自定義類型。

當您的視圖的EditTrigger指出,您的觀點將得到具體到哪個根據options參數編輯被調用,調用delegate->createEditor(...)然後可以大小組合框,以及爲當前進入細胞的委託到模型指定的值,儘管大部分應該由QStyledItemDelegate來處理。因此,您不必擔心Qt::EditRole,因爲該視圖可以處理該問題。

+0

謝謝,幫助 - 我怎麼實際掛鉤委託到QAbstractTableModel中的Qt :: Editrole? – 2010-04-22 23:51:47

+0

回答更新以討論如何調用編輯。 – 2010-04-23 04:32:55

+0

這就是我雖然但它不工作。我找到了spinbox的例子 - 一旦你給了我「QStyledItemDelegate」謝謝 – 2010-04-23 14:04:24

1

你嘗試,並從Qt的下面的例子看看:

Spin Box Delegate Example

也許它會給你關於這個問題的更清晰的看法!

希望它有一點幫助!

+0

謝謝 - 發現它後我發佈了評論! – 2010-04-23 14:54:16