カンテラの光の下で

dNaga392's memorandom

【QScrolArea】中身のサイズに応じてスクロールバーを表示する

QScrollArea はスクロールバーを表示するウィジェットです。

スクロールバーは内包するウィジェットのサイズを受けて設定されます。
他のツールでも同様ですが、意味のあるスクロールバーを表示するにはコツがいります。

もし QScrollArea を見て、「これで手軽にスクロールバー表示できるぜ!ヒャッホーイ!」
と特に設定せずウィジェットやアイテムのサイズを動的に変化した場合、
意図したスクロールバーの表示はされません。
(アイテムが潰れた表示になるかもしれません。)

この問題に対処するには、まず QScrollArea に対して以下の設定をします。

   widgetResizable:true

加えて、QScrollArea直下の内包ウィジェット(ContentWidget)のレイアウトに
以下の設定をします。

   layoutSizeConstraint:SetMinimumSize

1つ目の設定で、ウィジェットのサイズ変更をQScrollAreaに容認させ、
2つ目の設定で、ContentWidgetのサイズをそれの持つアイテムによって変化するものとします。

これにより、QScrollAreaは中身のサイズの変化したことを受け取り、
スクロールバーが表示されるようになります。

参考