Глава 13. Создание графического интерфейса средствами Qt
l L a b e l −>s e t T e x t ( " T e x t L a b e l " ) ;
//Текст на метке.
//Создаём кнопку, задаём «родителя», геометрию и текст
QPushButton ∗ lPushButton = new QPushButton ( t h i s ) ;
lPushButton−>setGeometry ( 5 0 , 5 0 , 1 0 0 , 3 0 ) ;
lPushButton−>s e t T e x t ( " P u s h B u t t o n " ) ;
//Создаём поле ввода, задаём «родителя», геометрию и текст
QLineEdit ∗ l L i n e E d i t = new QLineEdit ( t h i s ) ;
l L i n e E d i t −>setGeometry ( 5 0 , 1 0 0 , 1 0 0 , 3 0 ) ;
l L i n e E d i t −>s e t T e x t ( " L i n e E d i t " ) ;
l L i n e E d i t −>s e l e c t A l l ( ) ; //Выделяем текст в поле ввода (просто для примера)
//Наконец изменяем размер родительского виджета
setGeometry ( x ( ) , y ( ) , 3 0 0 , 1 5 0 ) ;
//и задаём текст заголовка окна
s e t W i n d o w T i t l e ( " P a r e n t W i d g e t E x a m p l e " ) ;
}
Поскольку родительским элементом является ParentWidget, то метка
(QLabel), кнопка (QPushButton) и текстовое поле (QLineEdit) находятся в его
пределах. Позицию дочерних виджетов задают относительно левого верхнего
угла отца. В этом легко убедиться изменив размеры и позицию окна нашей про-
граммы. Обратите внимание на то, как мы создавали элементы пользователь-
ского интерфейса в динамической памяти используя оператор new. Это гаран-
тирует, что элементы не будут удалены после завершения работы конструктора
ParentWidget
.
Далее добавим в проект файл main.cpp. Наш класс наследует от класса
QWidget
— базового класса для всех визуальных элементов пользовательского
интерфейса, а следовательно будет обладать всеми его особенностями. Созда-
дим экземпляр нашего класса и вызовем метод show() для того, чтобы показать
его (см. рис. 13.3).
#include
//Подключаем .h файл с определением нашего класса ParentWidget
#include " p a r e n t w i d g e t . h "
i n t main ( i n t l A r g c , char ∗ lArgv [ ] )
{
Q A p p l i c a t i o n l A p p l i c a t i o n ( l A r g c , l A r g v ) ;
//Создаём и показываем окно программы
ParentWidget l P a r e n t W i d g e t ;
//Переместить окно в точку экрана с координатами 100, 200
l P a r e n t W i d g e t . move ( 1 0 0 , 2 0 0 ) ;
l P a r e n t W i d g e t . show ( ) ;
return l A p p l i c a t i o n . e x e c ( ) ;
}
Рис. 13.3: Пример создания дочерних виджетов
Программирование на языке С++ в среде Qt Creator
13.2. Компоновка (Layouts)
359
13.2
Компоновка (Layouts)
Для того, чтобы оптимально разместить виджеты на форме, необходимо
учесть ряд деталей:
• размер соседних виджетов;
• визуальные компоненты могут динамически изменять размер, исчезать или
появляться в следствии работы логики программы;
• форма, в которой размещают виджеты, может динамически изменять раз-
мер при работе программы (когда пользователь меняет размер окна либо
раскрывает его на весь экран);
• часто нужно растянуть визуальную компоненту таким образом, чтобы она
занимала всё пространство формы, или же чтобы несколько компонент за-
нимали пространство формы пропорционально (в соответствующих про-
порциях 1:1, 1:2, 3:5 и т.д.);
• часто нужно разместить виджеты либо группы виджетов вертикально либо
горизонтально на форме.
Понятно, что такая логика является довольно сложной для реализации при
создании пользовательских интерфейсов разной структуры. К счастью в арсе-
нале Qt есть довольно мощный инструмент для упорядочивания виджетов на
форме — компоновщик.
Компоновщик позволяет упорядочить размещение компонент, оставляя ин-
терфейс гибким для внесения изменений, таких как изменение размера либо
количества элементов на форме. Компоновщик также может обеспечивать адек-
ватное изменение размера самого виджета в ответ на перемены в его наполнении.
Компоновщик не принадлежит к виджетам, не наследует от QWidget и явля-
ется невидимым на форме. Он только управляет её размером и размещением её
содержания.
Обычно используют три основных класса компоновщика:
• вертикальная компоновка (класс QVBoxLayout);
• горизонтальная компоновка (класс QHBoxLayout);
• компоновка сеткой (класс QGridLayout);
Для того, чтобы продемонстрировать работу с компоновками, используем преды-
дущий пример добавив ещё несколько элементов и сделав так, чтобы размещение
элементов было пропорциональным и соответствовало изменениям размеров ок-
на. Попытаемся создать такой интерфейс:
• метки и поля ввода разместим горизонтально в одной строке;
• создадим три такие строки с метками и полями;
• добавим ещё одну строку с двумя кнопками горизонтально и правым вы-
равниванием.
Создадим проект LayoutExample. Для этого воспользуемся мастером новых
проектов. Выберем в списке Qt Widgets Application. Зададим название для
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.
360
Do'stlaringiz bilan baham: |