記錄一下,最近遇到的一個bug,我打算手動創(chuàng)建QScrollArea, 調(diào)用QScrollArea::setWidget(QWidget *widget),設(shè)置顯示的widget,此widget,我已經(jīng)設(shè)置好了布局,正常應(yīng)該是widget的大小隨著QScrollArea的大小自適應(yīng)改變,但實際效果是,widget只是固定大小,并沒有隨著QScrollArea的尺寸改變而改變。查了一圈資料,發(fā)現(xiàn)一個這個問題:void setWidgetResizable(bool resizable)
widgetResizable : bool
這個屬性決定scroll area是否會設(shè)置視圖窗口的大小。
默認是false。
但是?。。?!如果你用Designer來創(chuàng)建QScrollArea,這個屬性就是true?。?!wtf???
void QScrollArea::setWidget(QWidget *widget)
為什么要解釋一下setWidget,因為這個api也坑點滿滿,翻譯出來,你就知道了!
翻譯:
- 此API用于設(shè)置
scroll area的widget. - 這個
widget會成為scroll area的子窗口,如果scroll area被銷毀或者scroll area設(shè)置了新的widget,則此widget也會隨之銷毀。 - 這個
widget的autoFillBackground會自動被設(shè)置為true. - 如果當這個
widget添加的時候,scroll area已經(jīng)是可見狀態(tài),則你必須要要顯式調(diào)用一次widget的show方法。 - 注意:如果你在這個
widget上添加布局,則必須在調(diào)用QScrollArea::setWidget(QWidget *widget)之前就要添加好;反之,如果在調(diào)用QScrollArea::setWidget(QWidget *widget)之后添加widget布局,這個widget將會不可見,除非調(diào)用一次scroll area的show()方法。In this case, you can also not show() the widget later.(這一句實在沒搞懂說的啥??)