2

QVBoxLayoutを備えたコンテナウィジェットがあります。

VBoxLayoutに約100個のウィジェットを追加しました。それらはすべて同じ高さです。ある時点で、行の1つをサイズ変更する必要があります。ウィジェットのサイズを変更(newWidth、newHeight)し、QVBoxLayoutでlayout()を呼び出しますが、何も変更されません。サイズは固定されたままです。

QVBoxLayoutでウィジェットの高さを動的に変更するにはどうすればよいですか?

4

1 に答える 1

6

レイアウトに挿入されるウィジェットのサイズ変更は、設計上、操作なしです。レイアウトは、あなたではなくウィジェットのサイズを決定します。

QVBoxLayoutで固定高さのウィジェットが必要な場合は、ウィジェットの最小および最大の高さを設定し、そのsizePolicyが垂直方向で無視されないようにする必要があります。

他のすべてのウィジェットの2倍の高さのウィジェットが必要な場合。そのストレッチを2に設定し、他のウィジェットのストレッチを1に設定します。を呼び出しlayout->setStretch(index, stretch)ます。ウィジェットには、ストレッチに比例して幅が割り当てられます。たとえば、すべてのストレッチが1で、1つのストレッチが2の場合、ストレッチ2のウィジェットは2倍のスペースを取得します。

他のすべてが等しい場合(これは重要なビットです!)、ストレッチはウィジェットのピクセルサイズに比例します。必要に応じて、すべてのウィジェットの高さを20ピクセル、1つのウィジェットの高さを30ピクセルとすると、ストレッチをそのように設定します。

レイアウトに正確な高さがあり、すべてのウィジェットの高さ+間隔+マージンの合計がレイアウトの高さになる場合、レイアウト内のウィジェットのheight=stretchが得られます。逆に、レイアウトの高さから始めて、上下の余白を差し引き、(ウィジェット数-1)*間隔を空けると、ウィジェットの高さが残ります。次に、ストレッチを目的の高さに等しく設定することにより、ウィジェット間でその高さを手動で分散できます。

sizePolicyデフォルトでウィジェットが大きすぎる場合は、ウィジェットのオーバーライドが必要になる場合があります。

于 2012-06-12T16:20:22.723 に答える