Получение уведомлений об изменениях 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 ответов

Другие вопросы по тегам