【发布时间】:2012-03-28 14:23:24
【问题描述】:
我的自定义 QListView 有代表来绘制项目。我想为某些行项目(如 QLineEdit)添加一个实时控件,该控件将始终存在于行中,并且会随着列表自动正确滚动。
由于项目不是小部件,我不能将控件指定为“项目”的子级,因此滚动会将控件留在 QListView 小部件内的固定位置。
还有其他方法吗? 这可能吗?
【问题讨论】:
标签: qt
我的自定义 QListView 有代表来绘制项目。我想为某些行项目(如 QLineEdit)添加一个实时控件,该控件将始终存在于行中,并且会随着列表自动正确滚动。
由于项目不是小部件,我不能将控件指定为“项目”的子级,因此滚动会将控件留在 QListView 小部件内的固定位置。
还有其他方法吗? 这可能吗?
【问题讨论】:
标签: qt
通常,当QEvent::EnterEditFocus 事件发生时,编辑小部件由委托创建(和定位),然后在随后的QEvent::LeaveEditFocus 发生时销毁,并将数据发送回模型。然后,委托应使用新的模型数据重新绘制。
您能否详细说明“实时”控件的含义?
为什么要让编辑小部件不断打开?我认为更好的方法是创建一个委托,以您想要的方式绘制普通视图(即Qt::DisplayRole)。假设您正确地创建了子类视图,当模型更改时,委托仍应更新。
如果你真的想做你所要求的,我怀疑你可以通过:
QAbstractItemDelegate)createEditor() 以使用QLineEdit
updateEditorGeometry()
首先阅读模型/视图编程简介的Delegate Classes 部分。 Spin Box Delegate Example 和 Pixelator Example 如果您还没有学习过,也值得学习。
【讨论】: