×
Namespaces

Variants
Actions

Менеджеры компоновки (Layout managers)

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Совместимость
Платформа(ы):
Symbian

Статья
Автор: Den123 (27 Jan 2009)
Последнее редактирование: hamishwillee (08 May 2013)

Менеджеры компоновки - это набор классов модуля QtGui, которые предоставляют разработчикам простой и, в то же время, очень мощный механизм, позволяющий управлять расположением вложенных элементов. В качестве вложенных элементов могут выступать как виджеты, так и другие менеджеры компоновки, что дает возможность задавать достаточно сложные варианты размещения.

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

Встроенные менеджеры компоновки поддерживают следующие варианты расчета геометрии:

  • QHBoxLayout отвечает за горизонтальное расположение вложенных элементов
  • QVBoxLayout - вертикальное расположение
  • QGridLayout - табличное расположение

Разработчик может реализовывать собственный менеджер компоновки, для этого нужно создать потомка класса QLayout (предок всех менеджеров компоновки) и перекрыть необходимые методы. Эта возможность позволяет организовать расположение элементов пользовательского интерфейса практически любой сложности.


В следующем примере менеджер расположения рассчитывает позицию трех кнопок, которые будут равномерно размещены по горизонтали.

QWidget widget;
 
QPushButton* button1 = new QPushButton( "One" );
QPushButton* button2 = new QPushButton( "Two" );
QPushButton* button3 = new QPushButton( "Three" );
 
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget( button1 );
layout->addWidget( button2 );
layout->addWidget( button3 );
 
widget.setLayout( layout );
widget.resize( 500, 40 );
widget.show();

Помимо расчета положения и размеров указанных элементов, компоновщики устанавливают родительский объекты всем обслуживаемым элементам (в данном случае widget). При вызове деструктора родительского объекта его дочерние элементы будут удалены автоматически (см. иерархии объектов).

Расстояние между элементами и толщина границ менеджера компоновки по умолчанию зависит от текущего стиля, однако эти параметры можно указать, используя методы void QLayout::setSpacing(int) и void QLayout::setContentsMargins ( int left, int top, int right, int bottom ).

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

Растяжка (stretch) - это фактор растяжения, который можно добавить в компоновки. Растяжки отвечают за то, каким образом будет вести себя пустое место между элементами. Для добавления растяжки в классе QLayout определен метод addStretch().

Для визуального проектирования графического интерфейса можно воспользоваться IDE Carbide либо специализированной средой разработки GUI - Qt Designer.

В следующем примере основное окно использует вертикальный менеджер компоновки, вложенные элементы используют также горизонтальное и табличное размещения:
Qt gui designer.PNG

This page was last modified on 8 May 2013, at 03:04.
170 page views in the last 30 days.