我有一个 QTableView,我想始终在编辑模式下显示最后一列。 (这是一个 QComboBox,用户应该能够随时更改值。)
我想我已经在Qt文档中看到了解决方案,但我再也找不到了。有简单的方法吗?
openPersistentEditor()
来存档此效果,但我正在寻找更好的方法。 (就像为整列只指定一次一样。)
有两种可能:
setIndexWidget
,但 Trolltech 写道:
此功能只能用于 显示静态内容 对应item的可见区域 数据的。如果你想显示自定义 动态内容或实现自定义 编辑器小部件,QItemDelegate 子类 相反。
(它打破了模型/视图模式......)
或者使用委托的
paint
方法。但在这里你必须自己实现启用/禁用元素等所有内容。
获得自动编辑行为的一种方法是使用
setEditTriggers()
值调用视图的 QAbstractItemView::AllEditTriggers
函数。
要以某种方式显示给定列的内容,请查看
QAbstractItemView::setItemDelegateForColumn()
。这将允许您为那些需要它的项目指定一个自定义委托。但是,它不会自动为每个项目创建一个编辑器小部件(原则上可能有数千个),但您可以使用委托以使其看起来像编辑器小部件的方式呈现每个项目。
我看不出有什么简单的方法可以做到这一点,但您也许可以通过使用委托来进行管理。 老实说,我不知道它到底是如何工作的,但如果你足够努力,你应该能够让一些东西发挥作用。 如果您获得合适的委托,您应该能够将其设置在整个视图、视图的一个单元格或者只是一列或一行上。
调用 QAbstractItemModel::flags 虚拟函数来测试项目是否可编辑(请参阅Qt::ItemIsEditable)。查看模型/视图编程文档中的使模型可编辑。