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

11

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

我认为我在 Qt 文档 中看到了解决方案,但我现在找不到它了。有没有简单的方法可以做到这一点?

我认为我可以通过使用openPersistentEditor()来实现此效果,但我正在寻找更好的方法。(比如仅为整个列指定一次。)

4个回答

4
有两种可能性:
一种是使用 setIndexWidget,但 Trolltech 写道:

此函数应仅用于在数据项对应的可见区域内显示静态内容。如果要显示自定义动态内容或实现自定义编辑器小部件,则应子类化 QItemDelegate。

(并且它会破坏模型/视图模式...)
另一种是使用委托的 paint 方法。但是这里需要自己实现像启用/禁用元素之类的所有内容。

4

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

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


0

2
我正在寻找的解决方案不是如何使单元格可编辑,而是如何始终显示编辑器。 - Georg Schölly

0
我看不出有什么简单的方法可以做到这一点,但你可能可以通过使用委托来实现。我真的不知道它会如何工作,但如果你足够努力,应该能够得到一些可行的东西。如果你获得了一个合适的委托,你应该能够将其设置在整个视图、一个视图的一个单元格或者只是一列或一行上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接