小图描述问题是什么:
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() 已更改?