2

QVBoxLayout があり、実行時に他の QWidget を動的に追加します。

for(int i = 0; i < value; i++)
{
    QList<QWidget*> widgetList_i;
    //... widgetList_i.append(a lot of widgets)
    ui->verticalLayout->addWidget(widget_i);
}

これらの追加されたウィジェットの間には多くの無駄なスペースがあります: 動的 QWidegt 間に無駄なスペースがある

アプリケーションを実行すると、マウスで高さを圧縮できます。

境界線をマウスでドラッグしてスペースを圧縮

各 widgetList_i ウィジェットの高さを setMaximumheigth() で制限するのは良い方法ですが、最初と最後にスペースが無駄になります。 最大高さ

a だけを追加するui->vertivalLayout->addStretch(1);と、最後に空白が生じます。そのレイアウトの始まりは素晴らしいです: ここに画像の説明を入力

主な質問: 追加されたウィジェットに関するレイアウトの高さを最小限に設定する機能はありませんか?
副次的な質問: そのウィジェットに垂直スクロールバーを追加するにはどうすればよいですか?

編集: - spaceritem を追加すると、さらに悪化します:SpaceItem私の問題は解決しません

4

1 に答える 1

4

素早い回答

挿入コードの前にこの行を置きます

ui->verticalLayout->parentWidget()->setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Maximum);

*また、このプロパティは QtDesigner でも見つけることができます。QDockWidget ではなくレイアウトを選択していることを確認してください。

説明

レイアウトにはサイズはありませんが、ウィジェットがあります。レイアウトは他のウィジェット内にあるため、レイアウトの親ウィジェットのサイズを変更する必要があります。 setSizePolicyウィジェットのサイズ動作を変更します。このメソッドには、水平ポリシーと垂直ポリシーの 2 つの引数があります。ウィジェットの優先ポリシーが最大サイズであることを意味するようPreferredに、垂直方向のポリシーを変更するのがデフォルトで あるため、水平方向を維持できます。Maximum

副次的な質問: QScrollAreaウィジェットにスクロール機能を提供します。でラップしてからQLayoutでラップできます。QWidgetQScrollArea

于 2015-11-09T15:19:43.237 に答える