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

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]