web-dev-qa-db-ja.com

レイアウトのQLabelにテキストを設定すると、サイズは変更されません

Qtクリエーターのデザイナーを使用して、垂直レイアウトのさまざまなウィジェットを含むダイアログを作成しました。ウィジェットの1つは、ワードラップがtrueに設定されたQLabelです。 QLabelのテキストは、ダイアログが表示される直前に設定されます。

QLabelの最大幅と高さは16777215で、垂直サイズポリシーは拡張に設定され、水平は推奨です。サイズポリシーを変更してみました。

私が抱えている問題は、テキストが大きい場合、QLabelがそれに応じて調整されず、テキストが次のようにクリップされることです。

enter image description here

テキストを設定した後、ダイアログのupdateGeometry()を呼び出してみましたが、垂直レイアウトでupdateを呼び出してみましたが、何も違いがないようです。理想的には、QLabelをテキストに合わせて垂直方向に調整する必要があります。

誰かが私がここで欠けているものを教えてもらえますか?

15
TheDarkKnight

ラベルの垂直サイズポリシーをQSizePolicy::Minimumに設定します。次に、ダイアログのレイアウトのsizeconstraintをQLayout::SetMinimumSizeに設定します。これにより、ダイアログが大きくなり、すべてのコンテンツがダイアログ内に収まるようになります。

このようなもの:

QVBoxLayout *layout = new QVBoxLayout;
layout->setSizeConstraint(QLayout::SetMinimumSize);
this->setLayout(layout);
for(int i = 0; i < 5; i++)
{
    QLabel *label = new QLabel;
    label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
    label->setWordWrap(true);
    label->setText("This is a very long text. This is a very long text. This is a very long text. "
                   "This is a very long text. This is a very long text. This is a very long text. This is a very long text. "
                   "This is a very long text. This is a very long text.");
    layout->addWidget(label);
}
17
thuga

私の実験では、QLabelを含むレイアウトでlayoutSizeConstraintプロパティをSetMinimumSizeに設定するだけで、ラベルを展開してその内容に合わせることができます。

UIの構築に使用した場合は、Qt Designerでそのプロパティを変更するか、コードを使用して変更できます。

layout->setSizeConstraint(QLayout::SetMinimumSize);

ネストされたレイアウトがある場合は、チェーンの上のすべてのレイアウトで制約を設定する必要がある場合があることに注意してください。ラベル自体のsizePolicyを変更する必要はありません。少なくとも私の経験では、デフォルト(水平サイズと垂直サイズの両方のポリシーでPreferred)が機能するはずです。

1
waldyrious