QT 模型/ View 框架存在以下问题。我想在表格 View 项中呈现一个小部件。
首先我的想法是使用
void QAbstractItemView::setIndexWidget( const QModelIndex & index, QWidget * widget )
但是这个函数的文档明确指出:
This function should only be used to display static content within the visible area corresponding to an item of data. If you want to display custom dynamic content or implement a custom editor widget, subclass QItemDelegate instead.
所以他们建议在这里使用委托(delegate)。嗯,到目前为止一切顺利。我知道委托(delegate)可以用来创建一个编辑器,它基本上可以是任何 QT 小部件。但问题是——我不希望这个小部件成为编辑器——我想始终使用这个小部件呈现项目。而不仅仅是“渲染”,我需要它具有小部件的确切行为。
现在我要使用的小部件是一个自定义小部件,它是一些其他小部件的容器(很少有复选框,有一些布局的按钮)。
我考虑的解决方案是这样的:
知道怎么做,但我想这是可能的)
这个解决方案似乎有效,但对我来说很难闻。任何人都可以为这个问题提供更优雅的解决方案吗?
谢谢。
最佳答案
Delegates负责creating editors以及做所有必要的展示。他们可能会使用样式来完成大部分绘画,例如绘制进度条或手动绘画。
但是,委托(delegate)不是小部件。除非调用了编辑器,否则它无法访问小部件的大部分内容。两者非常不同,目的不同,完成的事情也不同。
委托(delegate)最麻烦的方面之一是他们是 静态 .除非模型中的某些内容触发了更新(或者小部件被配置为监视悬停事件),否则委托(delegate)将不会用于重绘任何存在的数据——缓冲的表示将被绘制到屏幕上。
您可以控制何时使用 edit triggers 调用编辑器,尽管您绝对可以使用一些自定义代码来处理它,例如通过鼠标跟踪。
关于qt - 如何在 QT 中的 TreeView 项中呈现复杂的小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142161/