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