Что такое sizeHint? (подсказка размера). sizeHint - это получится рекомендуемый размер виджета. Qt где-то в своих недрах хранит эти размеры для разных видов виджетов.
Примечательно, что функции setSizeHint не существует.
А как же он тогда устанавливается?
Оказывается sizeHint можно переопределить для виджета, чтобы конкретный виджет имел некие иные отличные размеры.
По умолчанию sizeHint вычисляется в исходниках Qt для каждого типового виджета неким типовым алгоритмом.
В принципе можно разобраться как работает, если покапаться в исходниках Qt. Проблема в том , что для разных видов виджетов sizeHint вычисляется по разному.
sizeHint для QMdiSubWindow
Например для QMdiSubWindow sizeHint по веритикали вычисляется как:
margin 7 titleBarHeight() (38) d->layout->totalSizeHint() [QSize(159, 110)] .
7 38 110=155
Это почти точно ровняется geometry:Height - geometry:Y . Тут 154 .
QSize 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());
}
Ширина sizeHint виджета QMdiSubWindow вычисляется как QStyle::SC_TitleBarLabel [30] SC_TitleBarLabel [16] ширина контролов (кнопки закрыть,максимизировать ,свернуть) [42 42 42] = 172
И это меньше чем geometry:Width- geometry:X . Тут 201-9=192 .
У нас QMdiArea горизонтально ориентированная, возможно поэтому sizeHint не учитывает ширину элементов содержания.
Кто использует sizeHint впоследствии?
Это например функция adjustSize().
Но также sizeHint использует метод updateGeometry() и это более правильный путь.
Примечание: для удобного проникновения в исходники рекомендуем собирать саму библиотеку qt из исходников, тогда вы всегда сможете прямо из отладки шагнуть внутрь исходников и посмотреть, что там делается. Сборка Qt из исходников.
Может показаться , что sizeHint есть только у виджетов, но это не так. QLayout (компоновщики) тоже имеют метод sizeHint.