2010-04-22 103 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