Qt:自定义QListView和live控件

Qt:自定义QListView和live控件,qt,Qt,我的自定义QListView具有绘制项目的委托。我想向某些行项目(如QLineEdit)添加一个live控件,该控件将始终显示在行中,并自动与列表一起正确滚动 由于项不是小部件,我无法将控件指定为“项”的子项,因此滚动将使控件留在QListView小部件内的固定位置 还有别的办法吗? 这可能吗?通常,当发生QEvent::EnterEditFocus事件时,代理创建(并定位)编辑小部件,然后在随后发生QEvent::leveeditfocus事件时销毁,并将数据发送回模型。然后,委托应使用新模型

我的自定义QListView具有绘制项目的委托。我想向某些行项目(如QLineEdit)添加一个live控件,该控件将始终显示在行中,并自动与列表一起正确滚动

由于项不是小部件,我无法将控件指定为“项”的子项,因此滚动将使控件留在QListView小部件内的固定位置

还有别的办法吗?
这可能吗?

通常,当发生
QEvent::EnterEditFocus
事件时,代理创建(并定位)编辑小部件,然后在随后发生
QEvent::leveeditfocus
事件时销毁,并将数据发送回模型。然后,委托应使用新模型数据重新绘制

你能详细说明你所说的“实时”控件是什么意思吗

为什么您希望编辑小部件一直处于打开状态?我认为更好的方法是创建一个代理,以您想要的方式绘制普通视图(即for)。假设您正确地创建了子类视图,那么当模型更改时,委托仍应更新

如果你真的想做你想做的事,我想你可以:

  • 创建自己的项目委托(子类化)
  • 重新实现以使用
  • 然后使用代理的

首先阅读模型/视图编程导论的一节。如果您还没有学习过的话,那么和也值得学习。

我的列表视图中的每一行都类似于即时通讯器中的一行。每行代表一个联系人。它还有一些按钮。这些按钮是“手绘”的,因为您不能只将QPushButtons放在listviewRow上。滚动根本不起作用。某些联系人行需要输入类似pin的密码,以便可以使用该按钮。我想在其中一个按钮旁边放一个小编辑框。我不希望用户“双击/单击”使编辑框出现在那里。我希望编辑框一直在那里,并与listView一起正确滚动。在我看来,这是一个更适合定制QWidgets而不是QListView的问题。或者可能是QTableView,或者QAbstractItemView.maybe的子类。我只是没有时间去发明一个完整的“QListView,它能够在每行托管实时QWidgets”的概念。我希望有一种方法可以在当前的基础设施上实现这一点。为什么不创建一个“用户”小部件并启用所有控件,然后将该小部件添加到现有的(可滚动的)布局小部件中呢?我如何获得可滚动的小部件?