Я уже два года глубоко работаю с системой компоновки Qt. После этого времени я столкнулся с тысячами проблем с SizePolicies и Layouts. Обычно я находил решения, но никогда не понимал, что делаю.
Теперь я потратил некоторое время, чтобы попытаться правильно понять и создать для них 101 РУКОВОДСТВО и никогда не ошибаться. Я узнал эту информацию в документации о QSizePolicy QWidget:
Это свойство содержит поведение макета виджета по умолчанию.
Если есть QLayout, который управляет дочерними элементами этого виджета, используется политика размера, указанная этим макетом. Если такого QLayout нет, используется результат этой функции.
Я думал, что если у вас есть, например, QLabel, и вы устанавливаете политики на Horizontal Expanding, Vertical Fixed, сама ЭТИКЕТКА изменится таким образом. Но это совсем не так.
Читая это, я вижу, что внутри МАКЕТА говорится о ЕГО ДЕТЯХ. Так что же это значит? Внутри этикетки ничего нет, поэтому она не работает?
Как насчет того, чтобы вставить метку внутрь QFrame и указать, что фрейм расширяется... Будет ли расширяться или растягиваться QFrame (в зависимости от остальных виджетов-братьев в том же макете) или будет расширяться или растягиваться метка, а не QFrame?
Какой беспорядок...
Как насчет растяжки? Если вы установите растяжение 10 при добавлении виджета:
layout->addwidget(label, 10, Qt::AlignHCenter);
Это тоже не работает.
Растянуть 0 при добавлении виджета означает: Принять политики, которые я вам сказал. По умолчанию, зависит от типа виджета. Кнопочные виджеты имеют фиксированное расширение. Коробчатая расширяющаяся-расширяющаяся...
Stretch 10 означает: расти максимально.
Я прав? Что ж. Когда внутри есть QFrame и QLabel, установка Expanding и 10 для растяжения метки НЕ РАБОТАЕТ.