2012-05-25 9 views
11

私は隅に独自のサイズ変更グリップを持っているカスタムQTextEditウィジェットを持っています。テキストウィジェットのサイズを変更することはできますが、内部にあるレイアウトはテキスト編集のサイズ変更で変更されません。レイアウトの更新/サイズ変更を管理する子がサイズ変更を行うときに強制的に適用するには?

ウィジェットの1つのサイズの独立した変更に基づいて管理レイアウトに再計算するように指示する方法はありますか?

答えて

20

レイアウトは、その子のsizeHint()minimalSizeHint()size()ではなく)を基準にしています。したがって、これらの2つの仮想メソッドを再実装し、強制したいサイズを返す必要があります。たびあなたのサイズヒント変化、あなたはウィジェットが中に配置されたレイアウトの更新をトリガするために、独自のウィジェットをupdateGeometry()を呼び出す必要があり

ドキュメントを参照してください:。

  • virtual QSize QWidget::sizeHint() const

    このプロパティは、ウィジェットの推奨サイズを保持します。
    [...]

  • virtual QSize QWidget::minimumSizeHint() const

    このプロパティは、ウィジェットのための推奨最小サイズを保持しています。
    [...]
    QLayoutは、minimumSize()が設定されていないか、サイズポリシーがQSizePolicy :: Ignoreに設定されていない限り、ウィジェットのサイズを最小サイズヒントよりも小さくしません。 minimumSize()が設定されている場合、最小サイズのヒントは無視されます。

ので、力ウィジェットの最小サイズに、あなたの最小サイズを返すことによってminimumSizeHint()を実装します。 に固定サイズを強制し、両方を同じサイズを返すように実装します。

私はまた、ドキュメントページ"Layout Management"で、次のセクションを読んでお勧めします。レイアウトで

カスタムウィジェット

独自のウィジェットクラスを作るとき、あなたはまた、そのレイアウトプロパティを伝える必要があります。ウィジェットがQtのレイアウトの1つを持っている場合、これはすでに処理されています。ウィジェットは子ウィジェットを持っている、または手動レイアウトを使用しない場合は、次のメカニズムのいずれかまたはすべてを使用して、ウィジェットの動作を変更することができます

  • 再実装のQWidget ::のsizehint()推奨サイズを返すためにウィジェットの
  • QWidget :: minimumSizeHint()を再実装して、ウィジェットが持つことができる最小サイズを返します。
  • QWidget :: setSizePolicy()を呼び出して、ウィジェットの領域要件を指定します。

サイズヒント、最小サイズヒント、またはサイズポリシーが変更されるたびに、QWidget :: updateGeometry()を呼び出します。これにより、レイアウトの再計算が行われます。QWidget :: updateGeometry()を複数回連続して呼び出すと、レイアウトの再計算が1回だけ発生します。


更新(コメントを参照してください):

あなたはまた、呼び出すことによって、大きさ(または唯一の高さ/幅)を強制することができます

QWidget::setFixedSize(QSize); 
QWidget::setFixedHeight(int); 
QWidget::setFixedWidth(int); 

これらの方法は、単純にサイズを設定指定された値にヒントがあり、updateGeometry() AFAIKに電話してください。しかし、多分彼らは(コメントに見られるように)私がこの問題をここで解決するために見つけることができる唯一の方法であったので、もう少ししているかもしれません。

+0

ありがとうございました。これらの関数を追加しましたが、ウィジェットが最初に構築されたときに呼び出されたように見えました。レイアウトのサイズを変更すると、ウィジェットが明らかにサイズ変更されていても、再度呼び出されることはありません。 – George

+0

また、 'updateGeometry()'を呼び出してみましたか?どのレイアウトタイプを使用していますか?ウィジェットをレイアウトに追加する際の間違いを再確認しましたか?あなたのサイズ変更グリップを使わなければ、あなたの 'QTextEdit'はいつものようにレイアウトの変更(親ウィジェットのサイズ変更)をしますか? – leemes

+0

さて、これは私がやっていることです。私はQtや何かの騒動ではありません。 http://pastebin.com/mRNLZEAp 関連性のないものはすべて削除します。どこでもupdateGeometry()を呼び出すと、texteditのサイズを変更できなくなります。 – George

関連する問題