描绘问题的小图片:
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()已被更改?