QTextEdit
隅に独自のサイズ変更グリップがあるカスタムウィジェットがあります。テキスト ウィジェットのサイズを変更することはできますが、内部のレイアウトはテキスト編集のサイズ変更によって変更されません。
管理レイアウトに、ウィジェットのサイズの独立した変更に基づいて再計算するように指示する方法はありますか?
QTextEdit
隅に独自のサイズ変更グリップがあるカスタムウィジェットがあります。テキスト ウィジェットのサイズを変更することはできますが、内部のレイアウトはテキスト編集のサイズ変更によって変更されません。
管理レイアウトに、ウィジェットのサイズの独立した変更に基づいて再計算するように指示する方法はありますか?
レイアウトは、その子のsizeHint()
とを尊重します(それらの ではありません)。したがって、これら 2 つの仮想メソッドを再実装し、強制するサイズを返す必要があります。サイズのヒントが変更されるたびに、独自のウィジェットを呼び出して、ウィジェットが配置されているレイアウトの更新をトリガーする必要があります。minimalSizeHint()
size()
updateGeometry()
ドキュメントを参照してください:
virtual QSize QWidget::sizeHint() const
このプロパティは、ウィジェットの推奨サイズを保持します。
[...]
virtual QSize QWidget::minimumSizeHint() const
このプロパティは、ウィジェットの推奨される最小サイズを保持します。
[...]
QLayout は、minimumSize() が設定されているか、サイズ ポリシーが QSizePolicy::Ignore に設定されていない限り、ウィジェットのサイズを最小サイズのヒントよりも小さいサイズに変更することはありません。minimumSize() が設定されている場合、最小サイズのヒントは無視されます。
したがって、ウィジェットの最小サイズを強制するには、最小サイズminimumSizeHint()
を返すことで実装します。固定サイズを強制するには、同じサイズを返すことで両方を実装します。
また、ドキュメンテーション ページ「レイアウト管理」の次のセクションを読むことをお勧めします。
レイアウトのカスタム ウィジェット
独自のウィジェット クラスを作成する場合は、そのレイアウト プロパティも伝達する必要があります。ウィジェットが Qt のレイアウトの 1 つを持っている場合、これは既に処理されています。ウィジェットに子ウィジェットがない場合、または手動レイアウトを使用している場合は、次のメカニズムのいずれかまたはすべてを使用してウィジェットの動作を変更できます。
- QWidget::sizeHint() を再実装して、ウィジェットの適切なサイズを返します。
- QWidget::minimumSizeHint() を再実装して、ウィジェットが持つことができる最小サイズを返します。
- QWidget::setSizePolicy() を呼び出して、ウィジェットのスペース要件を指定します。
サイズ ヒント、最小サイズ ヒント、またはサイズ ポリシーが変更されるたびに QWidget::updateGeometry() を呼び出します。これにより、レイアウトの再計算が発生します。QWidget::updateGeometry() を複数回連続して呼び出しても、レイアウトの再計算は 1 回だけです。
更新(コメントを参照):
次のように呼び出して、サイズ (または高さ/幅のみ) を強制することもできます。
QWidget::setFixedSize(QSize);
QWidget::setFixedHeight(int);
QWidget::setFixedWidth(int);
これらのメソッドは、サイズのヒントを指定された値に設定し、updateGeometry()
AFAIK を呼び出すだけです。しかし、(コメントに見られるように)これが私がここで問題を解決する唯一の方法だったので、おそらく彼らはもう少しやります。