记录一下,最近遇到的一个bug,我打算手动创建QScrollArea
, 调用QScrollArea::setWidget(QWidget *widget)
,设置显示的widget,此widget,我已经设置好了布局,正常应该是widget的大小随着QScrollArea的大小自适应改变,但实际效果是,widget只是固定大小,并没有随着QScrollArea的尺寸改变而改变。查了一圈资料,发现一个这个问题:void setWidgetResizable(bool resizable)
widgetResizable : bool
这个属性决定scroll area
是否会设置视图窗口的大小。
默认是false。
但是!!!!如果你用Designer来创建QScrollArea
,这个属性就是true!!!wtf???
void QScrollArea::setWidget(QWidget *widget)
为什么要解释一下setWidget,因为这个api也坑点满满,翻译出来,你就知道了!
翻译:
- 此API用于设置
scroll area
的widget
. - 这个
widget
会成为scroll area
的子窗口,如果scroll area
被销毁或者scroll area
设置了新的widget
,则此widget
也会随之销毁。 - 这个
widget
的autoFillBackground
会自动被设置为true
. - 如果当这个
widget
添加的时候,scroll area
已经是可见状态,则你必须要要显式调用一次widget
的show
方法。 - 注意:如果你在这个
widget
上添加布局,则必须在调用QScrollArea::setWidget(QWidget *widget)
之前就要添加好;反之,如果在调用QScrollArea::setWidget(QWidget *widget)
之后添加widget
布局,这个widget
将会不可见,除非调用一次scroll area
的show()
方法。In this case, you can also not show() the widget later.(这一句实在没搞懂说的啥??)