1

QHBoxLayout2 を含むを取得しましたQWidgets。これらはどちらもQWidgets縦横比 (正方形) が固定されており、QSizePolicyこれを行うことで最小の拡張が行われます。

QSizePolicy policy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
policy.setHeightForWidth(true);
setSizePolicy(policy);

そして次のように実装heightForWidthします:

virtual int heightForWidth (int w) const override {
    return w;
}

ここで、これらのウィジェットをレイアウトの中央に配置したいと考えています。したがって、次のようにレイアウトに追加します。

layout->addWidget(widget1, 0, Qt::AlignCenter);

ただし、このように最終的には好みのサイズになりますが、使用可能なすべてのスペースを占有するわけではありません。何故ですか?Qt::AlignCenter が私の SizePolicy を上書きするようです?!

対照的に、使用Qt::AlignVCenterすると、実際には使用可能なすべてのスペースを占有します。それはどのように適合しますか?

ありがとうございます!

4

1 に答える 1

1

ご了承くださいQt::AlignCenter = Qt::AlignVCenter + Qt::AlignHCenter
任意の種類の配置を設定する場合は、優先サイズ (sizeHint が返すもの) が必要であると言っていますが、オブジェクトは適切な方法で配置する必要があることに注意してください。スペース全体を埋めたい場合、配置は意味がありません。
したがって、あなたが説明した動作はそのように設計されていると思います。

余談: QGraphicsWidgets には、最小、優先、最大の 3 つの sizeHints があることに注意してください。この場合、ウィジェットが占有できる最大サイズがあるため、配置拡張サイズ ポリシーが適用されます。

于 2013-02-26T14:39:00.860 に答える