如何使用QStyledItemDelegate
/ QItemDelegate
永久显示复杂的小部件,即处理Qt.DisplayRole
而不是仅Qt.EditRole
?
documentation不能使用paint()...但这只是复杂的方法!让我们举个例子,在QTreeView
单元内渲染QTableVeiw
或QTableView
。
有QAbstractItemView.setIndexWidget()
,但这不是一个好主意,因为它仅用于显示静态内容(静态模型有什么用?)。
我在另一个post中找到了答案的一部分,但这只是答案的一小部分,所以我认为它值得在新帖中提出适当的问题。
答案 0 :(得分:2)
关键是使用QAbstractItemView.openPersistentEditor()
始终将单元格保持在编辑模式。
Qt.EditRole
标志。QStyledItemDelegate.sizeHintChanged.emit(index)
随时需要在编辑器小部件的大小更改时调用。QStyledItemDelegate.sizeHint()
可能很棘手且乏味(或者假设您在index.internalPointer().editor_widget.sizeHint()
期间将编辑器的引用保存到内部指针,则可以执行QStyledItemDelegate.createEditor()
应该提到的是,打开编辑器的成本很高,因此,如果您有成千上万的索引并且一次都将其加载,则可能需要一段时间。有很多方法可以缓解此问题:
fetchMore()
机制openPersistentEditor
(使用计时器,或当它们首次出现时)openPersistentEditor
,在父级折叠时调用closePersistentEditor
,并且可能限制在具有多个子级的节点上使用全部展开。