有时在UI界面直接拖出一个QScrollArea控件时,会发现不管往里边放多大的子控件,滚动条都不会出现,哪怕使用setFixedSize()手动固定死了子控件大小滚动条也不会出现。

1.去帮助手册看QScrollArea类的介绍:

QScrollArea类被描述为是显示frame内子widget的内容,重点是子widget这个容器,如果子widget超过了frame的大小滚动条才会出现。而子widget可以使用QScrollArea::setWidget(QWidget *widget)来指定,使用QWidget *QScrollArea::widget() const来获取QScrollArea内部的子widget。

2.再回到UI界面中看,手动拖出来的QScrollArea会自动生成一个子widget:

如果改变了这个子widget的大小,滚动条就可以出现:

3.还有在代码中使用resize()去调整子widget的大小时,滚动条此时也不会出现,后来看到QScrollArea类中有个widgetResizable属性,它决定着滚动区域是否应调整子widget的大小,默认为false(但在UI界面中拖出来已经为true)。如果设置为true,子widget的resize()不会生效,设为false才会生效。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐