問題が何であるかを示す小さな画像:
external_widget
+--------------------------------------------------+
| |
| |
| layout_widget |
| +-------------------------------+ |
| | | |
| | [internal_layout] | |
| | | |
| | | |
| | [Some Another Widget] | |
| +-------------------------------+ |
| |
+--------------------------------------------------+
layout_widget
- 垂直レイアウトの QWidget のみ。internal_layout
別のウィジェット
が含まれています。internal_layout
- ウィジェットが将来追加および削除されるレイアウト。
external_widget
- レイアウトのない QWidget だけです。レイアウト ウィジェットやその他のウィジェットの位置とサイズを手動で制御します。
いくつかのウィジェットを追加すると、internal_layout
LayoutRequest イベントが送信されます (私の知る限り、Qt ソース コードでこれを見ました)。このイベントは親ウィジェットによってキャッチされ、親ウィジェットは、レイアウトにlayout_widget
sizeHint() などの再計算を強制する何かが変更されたことをレイアウトに通知します。このプロセスを正しく理解していますか?
問題は sizeHint() が変更されていることですが、私external_widget
はそれについて何も知りません。layout_widget
sizeHint() の変更に関する通知を受け取りたい。出来ますか?
私もこれをやろうとしました:
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() が変更されたというイベントまたは通知を送信しますか?