1

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

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

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

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

4

2 回答 2

4

文档似乎建议我需要编写一个 QAbstractItemDelegate 和一个自定义绘制函数,但在 Qt::EditRole 中简单地弹出一个标准 QCombobox 似乎有点过头了。

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

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

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

于 2010-04-22T23:26:59.300 回答
1

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

旋转框代表示例

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

希望它有点帮助!

于 2010-04-23T05:44:32.340 回答