有一個(gè)需求是 QScrollArea中的組件需要?jiǎng)討B(tài)添加或刪除,比如懶加載的圖片列表女淑。
但是在實(shí)現(xiàn)的過(guò)程中只有第一次請(qǐng)求能夠成功添加組件北滥,當(dāng)對(duì) QScrollArea中的組件進(jìn)行更新時(shí) QScrollArea中的組件就會(huì)消失呻粹。
這個(gè)問(wèn)題困擾了我很久杠茬,仔細(xì)查看了官方文檔之后發(fā)現(xiàn)下面這段話:
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.
上面這段話的大概意思是:在調(diào)用 QScrollArea.setWidget之前必須設(shè)置 widget的 layout,在調(diào)用了 QScrollArea.setWidget之后再設(shè)置 widget的 layout的話 widget就會(huì)隱藏瞭恰。
雖然這里在調(diào)用 QScrollArea.setWidget之前就設(shè)置了 widget的 layout屯曹,但是我推測(cè)可能調(diào)用了 QScrollArea.setWidget之后更新 widget也會(huì)導(dǎo)致組件隱藏。
基于上面的分析惊畏,既然不能更新 widget恶耽,那我們就在每次需要更新 widget時(shí)重新創(chuàng)建一個(gè) QWidget,再調(diào)用 QScrollArea.setWidget函數(shù)設(shè)置新的 widget陕截。果然不出所料驳棱,修改代碼之后可以正常更新批什。
如果你不是在簡(jiǎn)書看到這篇文章农曲,請(qǐng)移步簡(jiǎn)書支持原作者