QListView::OnViewport itemwidget就消失了
时间: 2024-05-16 15:13:30 浏览: 162
QListView 是一个用于显示列表的 Qt 控件,OnViewport 是 QListView 的一个信号,表示视口发生变化时发送的信号。在使用 QListView 时,如果设置了 itemWidget,即每个 item 对应的 widget,当视口发生变化时,itemWidget 可能会出现消失的情况。
这是因为当 itemWidget 超出视口范围时,QListView 会将其从父窗口中移除,以提高性能。因此,当视口再次回到该 item 时,itemWidget 会重新创建。如果你想保持 itemWidget 的持久性,可以使用 setItemWidget 的方式,手动将 itemWidget 添加到 QListView 中,而不是直接设置 itemWidget。
另外,你可以通过在 itemWidget 中添加一个布尔变量来控制其是否应该保持持久性,例如:
```python
class MyItemWidget(QWidget):
def __init__(self, parent=None):
super(MyItemWidget, self).__init__(parent)
self._persistent = False
def setPersistent(self, persistent):
self._persistent = persistent
def event(self, event):
if event.type() == QEvent.ParentAboutToChange:
if self._persistent:
self.setParent(None)
return True
return super(MyItemWidget, self).event(event)
```
在使用时,如果需要 itemWidget 持久化,可以设置其 persistent 属性为 True:
```python
itemWidget = MyItemWidget()
itemWidget.setPersistent(True)
listView.setItemWidget(item, itemWidget)
```
这样,在视口变化时,itemWidget 就不会消失了。
阅读全文