有没有人在QAbstractTableModel中使用QWidget作为编辑器? 我有一个列,在编辑时应创建一个带有选项列表的QCombobox。
文档似乎暗示我需要编写一个QAbstractItemDelegate和一个自定义绘制函数,但是在Qt :: EditRole中简单地弹出标准QCombobox似乎有些过分。
注意 - 组合框内容对于每一行都是相同的,只有当有人点击单元格时才需要显示它。
我知道这应该很简单,但我无法让它发挥作用。基于QTableWidget的表很容易 - 但我需要它用于非常大的数据表。
答案 0 :(得分:4)
文档似乎暗示我需要编写一个QAbstractItemDelegate和一个自定义绘制函数,但在Qt :: EditRole中弹出标准QCombobox似乎有点过分。
你不需要那么远。一种方法是子类QStyledItemDelegate
,然后覆盖createEditor()
,以便它返回预先填充的组合框。如果你使用基本的Qt值类型,它的setEditorData
和setModelData
函数可能已经足够了。
如果您需要一些适用于多种不同模型的更通用的东西,您可以创建一个QItemEditorFactory
,将您的编辑器与正确的类型相关联。这也适用于自定义类型。
当您的视图EditTrigger
显示时,您的视图将获得特定于调用编辑的单元格的委托,并调用delegate->createEditor(...)
,然后可以根据{{options
调整组合框的大小1}}参数以及将当前条目设置为模型指定的值,尽管大部分应该由QStyledItemDelegate
处理。因此,您不必直接担心Qt::EditRole
视图将处理该问题。
答案 1 :(得分:1)