记录一下,最近遇到的一个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.(这一句实在没搞懂说的啥??)