私はQVBoxLayoutの全体的なレイアウトを持つカスタムウィジェットを持っています。それは、いくつかのラベル、QFormLayout、ボタン、およびすべての余分なスペースを食べるストレッチを含んでいます。ラベルの1つがかなり大きいので、テキストが読めない奇妙なケースがないようにしています。ウィジェットはQScrollArea内に含まれており、ユーザーがウィンドウの全体を縮小しても、そのウィジェットのすべての側面を確認できます。QLabelはサイズ変更時にテキストを切り捨てます
QLabelは細かいサイズで表示されますが、ある狭い範囲に達すると、ラベルの下の数行を切り取り、ウィジェットの下部にある領域にスペースを割り当てます。
私はデザイナーなしですべてこれをコード内で実行しています。だから、私は何かが欠落している可能性があります。サブコンポーネントは、次の順序で全体QVBoxLayoutに添加される:
OverallLayout = new QVBoxLayout(this);
Title = new QLabel();
Description = new QLabel();
SubRegion = new QFormLayout();
Button = new QButton();
...
// set text values, wordWrap(true), and Font for labels
OverallLayout->addWidget(Title);
OverallLayout->addWidget(Description);
OverallLayout->addLayout(SubRegion);
OverallLayout->addStrut(MIN_DIST);
OverallLayout->addWidget(Button);
OverallLayout->addStretch(STRETCH_FACTOR);
試験結果は:QLabel者のsizehint()関数から返された結果を調べる、返される値は、ウィジェットが水平に収縮するように変更する表示されません。しかし、QLabelは、垂直方向の部屋(153のヒントと103のヒント)を使用するように拡張していますが、すべてのテキストを収めるには不十分です。 QLabelが最初に表示されるとき、それはsizeHintより少ないピクセルを持ちますが、そのheightForWidthの量で十分です。サイズを変更すると、heightForWidthの値より30小さいが、そのsizeHintよりも大きくなります。
大きなQLabelのhasHeightForWidth()とwordWrap()の値がtrueに設定されています。私は間違って何をしていますか?
これらのウィジェットがレイアウトに追加される場所にコードスニペットを追加できますか?私はカットオフがないようにsetMinimumHeight()によってQLabelの最小サイズを設定しなければならないと思います。代わりに、スペーサー要素の最大高さ値を設定することもできます。 –
私はそれを修正する方法の1つは、サイズ変更されたメソッドにリンクし、最小の高さをDescriptionラベルのheightForWidth(width)値に設定することです。しかし、これはちょっとしたことだと思うので、レイアウトマネージャにその仕事をさせる適切な方法は何だろうと思っていました。 – ElCraneo
しかし 'setMinimumHeight()'を使うのはどうですか? – jdi