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