QMdiSubWindow проблема с изменением размера под содержание

Получается визуально такая ситуация, что QMdiSubWindow не меняет свой размер под размер контента помещенного в него.

Точнее при создании окна размер устанавливается нормально, но если впоследствии (динамически) размер содержания изменится, то размер QMdiSubWindow просто так не изменится (не подстроится под содержание).

На самом деле проблема может быть и не в QMdiSubWindow.
Например в QMdiSubWindow использовали QTabWidget (а о нем читайте на соседней странице) QTabWidget проблемы с уменьшением размера.

QMdiSubWindow является по сути рамкой (с титлом) над содержанием.

Вот так вычисляется sizeHint у QMdiSubWindow :

QMdiSubWindow::sizeHint() const
{
    Q_D(const QMdiSubWindow);
    int margin, minWidth;
    d->sizeParameters(&margin, &minWidth);
    QSize size(2 * margin, d->titleBarHeight()   margin);
    if (d->baseWidget && d->baseWidget->sizeHint().isValid())
        size  = d->baseWidget->sizeHint();
    return size.expandedTo(minimumSizeHint());
}

Что примечательно во всей этой ситуации, если потянуть за край рамки QMdiSubWindow, то QMdiSubWindow подстраивается под содержание, то есть размер меняется нормально (под содержание). Но разобраться во огромном количестве событий происходящих в этот момент очень не реально.

Получается, что возникающее событие resizeEvent у QMdiSubWindow порождает какие-то другие события (а точнее paint).

Понять какие события происходят у
QMdiSubWindow можно переопределив метод
Event
.

Но еще круче переопределить notify у QApplication и смотреть вообще все события.

Решить проблему можно таким образом например:
Сделать свое событие и кидать его на родителя (через postEvent например) , то есть на QMdiSubWindow , из своего окна (это будет widget() у QMdiSubWindow ), когда произошли изменения в содержании.

В обработчике этого события у QMdiSubWindow просто вызываем :

        adjustSize();
        updateGeometry();

И этого должно быть достаточно.

Но все-таки надо сказать, что увеличение размеров QMdiSubWindow всегда нормально происходит при отображении скрытого элемента, а вот уменьшение размеров при скрытии элемента почему-то происходит либо не полностью либо вообще размер QMdiSubWindow не меняется.

И в такой ситуации можно пойти другим более простым путем. Если надо отобразить элемент или блок элементов проще открыть его в другом отдельном модальном окне сделать там все что нужно и результат вернуть в QMdiSubWindow.

Постскриптум: похоже просто надо делать отложенный repaint,  то есть заводим таймер и в событии timerEvent отрисовываем виджет.Тамер ищите в QObject.