Я разработал следующую форму с помощью Qt Designer. Когда размер главного окна изменяется, я хочу сохранить фиксированный размер левой части макета (QHBoxLayout) и расширять только правую сторону QLineEdit виджета.
Добавив вертикальный разделитель слева QHBoxLayout, я смог зафиксировать его высоту, но не смог добиться того же самого для ширины.
Когда ширина главного окна увеличивается, ширина QHBoxLayout и QLineEdit увеличивается.
Как сделать так, чтобы левый макет имел фиксированный размер?





Я могу добиться требуемого поведения, установив layoutStretch на (0, 1).
Мой основной горизонтальный макет содержит два виджета: вертикальный макет и QLineEidt. Установив коэффициент растяжения макета равным (0, 1), мы указываем, что левый вертикальный макет должен занимать минимальное пространство, а правый QLineEdit должен занимать все доступное пространство.
Согласно документации Qt:
https://doc.qt.io/qt-6/layout.html#stretch-factors
Если мы применим коэффициенты растяжения к каждому виджету, они будут расположены пропорционально (но не меньше, чем их минимальный размер), например
- Если для какого-либо из виджетов установлены коэффициенты растяжения со значением больше нуля, то им выделяется пространство пропорционально их коэффициенту растяжения (поясняется ниже).
- Если для какого-либо из виджетов коэффициент растяжения установлен на ноль, они получат больше места только в том случае, если другим виджетам это место не нужно. Из них пространство в первую очередь выделяется для виджетов с политикой расширения размера.
- Любым виджетам, которым выделено меньше места, чем их минимальный размер (или подсказка о минимальном размере, если минимальный размер не указан), выделяется необходимый им минимальный размер. (Виджеты не обязательно должны иметь минимальный размер или подсказку о минимальном размере; в этом случае определяющим фактором является коэффициент растяжения.)
Не используйте голые макеты. Создайте отдельные виджеты-контейнеры для левой и правой панелей и установите для этих виджетов соответствующий макет. Затем вы можете установить максимальную/минимальную ширину для левого виджета, чтобы контролировать его размер. Вам также может потребоваться установить соответствующее растяжение макета для родительского hbox, чтобы правая панель всегда занимала все оставшееся пространство. Фактически, хорошей альтернативой установке фиксированной ширины было бы установить макет-растяжение так, чтобы размеры панелей изменялись пропорционально (например, левая панель всегда получает треть ширины, а правая панель - две трети).