QScrollArea
可能な限り最小のスペースを最大の高さまで確保するのは本当に大変でした。
私の GUI モデルは次のとおりです。 AQScrollArea
には、 class のウィジェットが取り込まれた垂直レイアウトが含まれていますTableRow
。私はこのクラスTableRow
が可能な限り最小限の高さを取ることを望みます. 上部には常に表示されるウィジェットがあり、下部には表示をQScrollArea
切り替えることができるラベルが含まれています。ラベルは、0 文字または無限の長さ (ハードウェアの制限は別として) のメモ用です。
クラスのラベルTableRow
の場合、垂直方向sizePolicy
を に設定するFixed
と、すべてのコンテンツに合わせて実際に必要な量が正確に使用されることがわかりました ( Qt レイアウト、ウィジェットのサイズ変更後に最小にサイズ変更 を参照)。ただし、これは では機能しないようQScrollArea
です。sizePolicy
実際、私が試したものはすべてQScrollArea
、固定された高さに保たれています。を除いてIgnore
、QScrollArea
その内容に関係なく、 は高さ 0 になります。
この問題の簡略化されたバージョンを生成するgit ブランチを作成しました。
固定の垂直方向の sizePolicy を適用した結果は次のとおりです。
このテスト ケースに期待すること:
- 最初のウィジェットの高さはほぼ 30px (上のウィジェットの高さ) で、
QLabel
とQScrollArea
- 2 番目のウィジェットの高さは 130 ピクセル (最大高さ 100 ピクセル) よりも短くする必要がありますが、
QScrollArea
スクロールせずにラベルを表示するのに十分な大きさにする必要があります sizePolicy
3 番目のウィジェットの高さは 130px で、スクロールバーが表示されます (この部分は、垂直方向が に設定されている場合を除いて、私が試したすべてのケースで正しいですIgnored
)
QScrollArea の高さがその子ウィジェットに依存する理由は明らかではないため、これを機能させるにはいくつかのことをオーバーライドする必要があるかもしれないことを理解しています (これがおそらく、これを簡単にするように設計されていないか、少なくともそうではなかったように)。
しかし、私がしようとしているケースは十分に一般的であり、現在のアプローチは正当化できると思います。個々のウィジェットが最大の高さに達した後にスクロールする別の/より良い方法がある場合、私が期待している3つの条件を満たしていれば、答えとしてそれを受け入れます。