QT Layout - начальные направления - PullRequest
4 голосов
/ 01 февраля 2011

Я новичок в QT. Я пытаюсь понять механизм компоновки, пытаясь реализовать это маленькое окно, показанное ниже. В главном окне QWidget есть следующие элементы:

  1. Один большой QWidget, который растягивается на всю клиентскую область.
  2. Два контейнера QWidget в верхней части окна. Оба должны иметь одинаковую высоту, но правый растягивается горизонтально, так как окно увеличивается / уменьшается.
  3. виджет контейнера одной кнопкой в ​​правом верхнем углу, с фиксированной высотой и шириной
  4. Большой контейнер QWidget, заполняющий остальную часть клиентской области, размер которого должен изменяться при изменении размера окна.

Размер родительского окна можно изменять.

Я ищу подсказки относительно того, какой макет мне следует использовать. Как мне достичь этого программно? определить, что растягивается автоматически, что остается с фиксированным размером? и как соблюдаются пропорции там, где их нужно хранить.

Буду признателен за любой указатель, который у вас может быть.

What I'm trying to achieve

Ответы [ 2 ]

3 голосов
/ 01 февраля 2011

для установки виджета на фиксированный размер в коде, который вы вызываете setFixedSize (int h, int w) для виджета.Для этого в Designer нажмите на виджет и посмотрите в редакторе свойств в разделе QWidget.откройте файл sizePolicy и установите горизонтальные и / или вертикальные фиксированные значения.Затем откройте Geometry и установите ширину и высоту.

Чтобы растянуть их при разных соотношениях в коде, вы используете отдельный аргумент при использовании макета блока.например, layout-> addWidget (button1, 1);layout-> addWidget (button2, 2);это заставит button2 расширяться вдвое быстрее, чем button1.Чтобы сделать это в дизайнере, откройте свойство sizePolicy виджетов и установите HorizontalStrech и / или VerticalSretch.Обратите внимание, что политика размера не должна быть фиксированной в этом случае для направления, на котором вы хотите установить растяжение.Кроме того, он никогда не позволит виджету уменьшиться ниже его минимального размера (он скорее испортит соотношение, чем уменьшит что-то слишком маленькое).

3 голосов
/ 01 февраля 2011

Самый простой и, на мой взгляд, лучший способ сделать это - через QHBoxLayout и QVBoxLayouts. Вы можете сделать это с помощью дизайнера в QtCreator, но я считаю, что он не работает идеально, если вам нужно со временем что-то адаптировать. Если это статический набор виджетов, я советую проектировать его с помощью дизайнера QtCreator, поскольку это значительно упростит вашу жизнь.

Если вы собираетесь делать это программно, главное окно должно быть настроено на использование QVBoxLayout, а затем двух sub-QVBoxLayout после этого, где нижнее сконфигурировано так, чтобы занимать любое пространство, которое оно может получить. Затем в верхнем QVBoxLayout добавьте QHBoxLayout с двумя верхними компонентами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...