如何告诉Qt始终在QTableView中显示编辑器?

时间:2009-02-09 14:36:13

标签: qt qtableview qitemdelegate

我有一个QTableView,我想在编辑模式下显示最后一列。 (这是一个QComboBox,用户应该能够始终更改该值。)

我想我已经在Qt documentation看到了解决方案,但我再也找不到了。有一种简单的方法吗?

我想我可以通过对每个单元格使用openPersistentEditor()来归档此效果,但我正在寻找更好的方法。 (比如只为整列指定一次。)

4 个答案:

答案 0 :(得分:4)

有两种可能性:

使用setIndexWidget,但Trolltech写道:

  

此功能仅适用于   显示内部的静态内容   与项目对应的可见区域   数据的。如果要显示自定义   动态内容或实现自定义   编辑器小部件,子类QItemDelegate   代替。

(它打破了模型/视图模式......)

或使用a delegate's paint method。但是在这里你必须自己实现启用/禁用元素之类的所有内容。

答案 1 :(得分:3)

获得自动编辑行为的一种方法是使用QAbstractItemView :: AllEditTriggers值调用视图的setEditTriggers()函数。

要以某种方式显示给定列的内容,请查看QAbstractItemView :: setItemDelegateForColumn()。这将允许您为需要它的项目指定自定义委托。但是,它不会自动为它们中的每一个创建一个编辑器小部件(原则上可能有成千上万个),但您可以使用委托以一种使其看起来像编辑器小部件的方式呈现每个项目。

答案 2 :(得分:0)

调用QAbstractItemModel :: flags虚函数来测试项是否可编辑(参见Qt::ItemIsEditable)。请查看Making the Model Editable文档中的Model/View Programming

答案 3 :(得分:0)

我看不到一种简单的方法,但您可以通过使用委托进行管理。老实说,我不确切知道它是如何工作的,但如果你努力的话,你应该能够得到一些有用的东西。如果你得到一个合适的委托,你应该能够在整个视图,视图的一个单元格或只是一列或一行上设置它。