2

問題が何であるかを示す小さな画像:

external_widget
+--------------------------------------------------+
|                                                  |
|                                                  |
|     layout_widget                                |
|     +-------------------------------+            |
|     |                               |            |
|     |     [internal_layout]         |            |
|     |                               |            |
|     |                               |            |
|     |   [Some Another Widget]       |            |
|     +-------------------------------+            |
|                                                  |
+--------------------------------------------------+

layout_widget- 垂直レイアウトの QWidget のみ。internal_layout別のウィジェット が含まれています。internal_layout- ウィジェットが将来追加および削除されるレイアウト。 external_widget- レイアウトのない QWidget だけです。レイアウト ウィジェットやその他のウィジェットの位置とサイズを手動で制御します。

いくつかのウィジェットを追加すると、internal_layoutLayoutRequest イベントが送信されます (私の知る限り、Qt ソース コードでこれを見ました)。このイベントは親ウィジェットによってキャッチされ、親ウィジェットは、レイアウトにlayout_widgetsizeHint() などの再計算を強制する何かが変更されたことをレイアウトに通知します。このプロセスを正しく理解していますか?

問題は sizeHint() が変更されていることですが、私external_widgetはそれについて何も知りません。layout_widgetsizeHint() の変更に関する通知を受け取りたい。出来ますか?

私もこれをやろうとしました:

external widget ctor:
{
    layout_widget->installEventFilter(this);
}

そしてそれらを捕まえようとしました:

void ...eventFilter(QObject* obj, QEvent* event )
{
    if (obj == layout_widget && event == QEvent::LayoutRequest)
    {
        // TODO;
    }
}

「TODO」ブロックに入ることはありませんでした。

layout_widget彼の内部で何かが変更され、サイズを変更する必要がある、つまり sizeHint() が変更されたというイベントまたは通知を送信しますか?

4

0 に答える 0