我的自定义QListView有代表来绘制项目。我想为一些行项(如QLineEdit)添加一个实时控件,它将始终存在于行中,并将自动与列表一起正确滚动。
由于项目不是小部件,我无法将控件指定为“项目”的子级,因此滚动会将控件保留在QListView小部件中的固定位置。
还有其他方法吗? 这甚至可能吗?
答案 0 :(得分:0)
通常,当发生QEvent::EnterEditFocus
事件时,委托会创建(和定位)编辑窗口小部件,然后在发生后续QEvent::LeaveEditFocus
时将其销毁并将数据发送回模型。然后代表应重新绘制新的模型数据。
你可以扩展“实时”控件的含义吗?
为什么要让编辑小部件不断打开?我认为更好的方法是创建一个委托,以您想要的方式绘制正常视图(即Qt::DisplayRole
)。假设您正确创建子类视图,代理应该在模型更改时更新。
如果你真的想做你想问的事,我怀疑你可以通过:
QAbstractItemDelegate
)createEditor()
以使用QLineEdit updateEditorGeometry()
首先阅读模型/视图编程简介的Delegate Classes部分。如果你还没有,Spin Box Delegate Example和Pixelator Example也值得研究。