QAbstractTableModel中的自定义编辑器

时间:2010-04-22 23:08:13

标签: model-view-controller qt qabstracttablemodel

有没有人在QAbstractTableModel中使用QWidget作为编辑器? 我有一个列,在编辑时应创建一个带有选项列表的QCombobox。

文档似乎暗示我需要编写一个QAbstractItemDelegate和一个自定义绘制函数,但是在Qt :: EditRole中简单地弹出标准QCombobox似乎有些过分。

注意 - 组合框内容对于每一行都是相同的,只有当有人点击单元格时才需要显示它。

我知道这应该很简单,但我无法让它发挥作用。基于QTableWidget的表很容易 - 但我需要它用于非常大的数据表。

2 个答案:

答案 0 :(得分:4)

  

文档似乎暗示我需要编写一个QAbstractItemDelegate和一个自定义绘制函数,但在Qt :: EditRole中弹出标准QCombobox似乎有点过分。

你不需要那么远。一种方法是子类QStyledItemDelegate,然后覆盖createEditor(),以便它返回预先填充的组合框。如果你使用基本的Qt值类型,它的setEditorDatasetModelData函数可能已经足够了。

如果您需要一些适用于多种不同模型的更通用的东西,您可以创建一个QItemEditorFactory,将您的编辑器与正确的类型相关联。这也适用于自定义类型。

当您的视图EditTrigger显示时,您的视图将获得特定于调用编辑的单元格的委托,并调用delegate->createEditor(...),然后可以根据{{options调整组合框的大小1}}参数以及将当前条目设置为模型指定的值,尽管大部分应该由QStyledItemDelegate处理。因此,您不必直接担心Qt::EditRole视图将处理该问题。

答案 1 :(得分:1)

您是否尝试过查看Qt中的以下示例:

Spin Box Delegate Example

也许它会让你对这个主题有更清晰的看法!

希望它有所帮助!