2

小图描述问题是什么:

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

layout_widget- 只是具有垂直布局的 QWidget。它包含另一个internal_layout和另一个小部件。 internal_layout- 将来添加和删除小部件的布局。 external_widget- 只是没有布局的 QWidget,我手动控制布局小部件和其他小部件的位置和大小。

当我添加一些小部件时internal_layout- 它会发送 LayoutRequest 事件(据我所知,我在 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