有一个需求是 QScrollArea中的组件需要动态添加或删除,比如懒加载的图片列表。
但是在实现的过程中只有第一次请求能够成功添加组件,当对 QScrollArea中的组件进行更新时 QScrollArea中的组件就会消失。
这个问题困扰了我很久,仔细查看了官方文档之后发现下面这段话:
PySide2.QtWidgets.QScrollArea.setWidget(widget)
Note that You must add the layout of widget before you call this function; if you add it later, the widget will not be visible - regardless of when you show() the scroll area. In this case, you can also not show() the widget later.
上面这段话的大概意思是:在调用 QScrollArea.setWidget之前必须设置 widget的 layout,在调用了 QScrollArea.setWidget之后再设置 widget的 layout的话 widget就会隐藏。
虽然这里在调用 QScrollArea.setWidget之前就设置了 widget的 layout,但是我推测可能调用了 QScrollArea.setWidget之后更新 widget也会导致组件隐藏。
基于上面的分析,既然不能更新 widget,那我们就在每次需要更新 widget时重新创建一个 QWidget,再调用 QScrollArea.setWidget函数设置新的 widget。果然不出所料,修改代码之后可以正常更新。
如果你不是在简书看到这篇文章,请移步简书支持原作者