2

いつレイアウトが行われるかを確定的に判断できないという問題があります。

簡単な例:

2 つのサブウィジェットを持つウィジェットがあります。

  • 上部のウィジェットの幅は拡大し、高さは固定されています。固定の高さがデフォルトで 50 に設定されているとします。
  • 下部のウィジェットの高さと幅が拡張されています
  • 垂直レイアウトが設定されています。

クリックしてコードを実行できるボタンがどこかにあるとしましょう。物事を簡単にするために、ボタンはウィジェット自体にはありません...

ボタンがクリックされると、次のことを行います。

  1. 一番下の拡張可能なウィジェットの高さを測定します。高さは100です。
  2. 「topWidget->SetMaximumHeight(100)」と「topWidget->SetMinimumHeight(100)」
  3. 一番下の拡張可能なウィジェットの高さを再度測定します。高さはまだ100

しかし、一番下の拡張可能なウィジェットの高さが変わるのがわかります!

これは、ステップ 3 を実行した時点では、レイアウトがまだ行われていないことを意味します。何をしても、update()、updateGeometry() - ステップ #2 とステップ #3 の間で下部ウィジェットの高さを変更できません。

これを解決する唯一の方法は、タイマーを 250 ミリ秒待機させてから、下部のウィジェットの高さを測定することです。これは常に正しいです。再レイアウトが正しく行われたことを意味します。

これはクレイジーで汚い解決策ですが、別の方法はありません。影響を受けるウィジェットの新しいサイズのレイアウトとクエリを決定論的に同期的に変更できるようにするために欠落している API はありますか?

4

1 に答える 1

0

ユーザーから: alexisdm

ステップ 2 と 3 の間で QApplication::processEvents() を呼び出してみてください (タイマーがイベント ループに許可することを実行する必要があります)。

于 2013-06-28T21:04:41.717 に答える