从内部窗口小部件获取有关sizeHint更改的通知

时间:2014-12-19 18:19:51

标签: c++ qt qwidget qlayout sizehint

描绘问题的小图片:

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()已被更改?

0 个答案:

没有答案