Qt手动创建QScrollArea,遇到的坑

记录一下,最近遇到的一个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 areawidget.
  • 这个widget会成为scroll area的子窗口,如果scroll area被销毁或者scroll area设置了新的widget,则此widget也会随之销毁。
  • 这个widgetautoFillBackground会自动被设置为true.
  • 如果当这个widget添加的时候,scroll area已经是可见状态,则你必须要要显式调用一次widgetshow方法。
  • 注意:如果你在这个widget上添加布局,则必须在调用QScrollArea::setWidget(QWidget *widget)之前就要添加好;反之,如果在调用QScrollArea::setWidget(QWidget *widget)之后添加widget布局,这个widget将会不可见,除非调用一次scroll areashow()方法。In this case, you can also not show() the widget later.(这一句实在没搞懂说的啥??)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容