次のように動作するスクロール領域が必要なのは初めてではありません (ログまたはチャットウィンドウを想像してみてください。単純な QTextBrowser を使用するには複雑すぎます)。
- 上下に表示される複数のウィジェットを追加したい (QVBoxLayout に配置したときのように)
- このレイアウト内の各ウィジェットは、固定サイズまたは高さ対幅 (単純なラベルなど) を持つ必要があります。
- スクロール領域は、最後に追加された領域に自動スクロールする必要があります
- (オプション)スペースが残っている場合(スクロールバーがまだ有効になっていない場合)、コンテンツを下に揃える必要があります
QScrollArea の使用:
過去の私の試みは、内部で QVBoxLayout を使用して QScrollArea を使用していました。しかし、これは思ったほど単純ではないようです。レイアウトにウィジェットを追加するたびに、レイアウトはスクロール領域のコンテンツ ウィジェットのサイズをすぐに変更しないため、コンテンツの調整が遅れます。一瞬、レイアウトに含まれるウィジェットのサイズが変更され、合計サイズが追加操作前の合計サイズと等しくなり、ウィジェットごとのサイズが小さすぎます。また、レイアウトがそのサイズをウィジェットの新しい合計サイズに修正するまで、新しく追加されたウィジェットにスクロールすることはできません。タイムアウトが 20 程度であっても、レイアウトのサイズ変更にさらに時間がかかる場合があります。これは決定論的ではないため、優れたソリューションとはほど遠いものです。
下揃えの動作を得るために、最初にスペーサー項目をレイアウトに配置します。スペースがなくなり、スクロールが有効になるとすぐに、スペースは必要ありません。
QListView の使用:
私の項目は複雑すぎるため、QWidgets である必要があります。それらはフォーカスを持つことができず、選択できないため、アイテムベースのソリューションは「間違った方法」のようです. また、このソリューションは「重すぎる」ように聞こえます。
簡単な方法がないなんて信じられないので、まだ見ていないだけだと思います!