Глава 13. Создание графического интерфейса средствами Qt
#include
#include
i n t main ( i n t lArgc , char ∗ lArgv [ ] )
{
//Создаём объект QApplication, который инициализирует и настраивает оконную программу,
//управляет её выполнением с помощью цикла обработки событий
Q A p p l i c a t i o n l A p p l i c a t i o n ( lArgc , l A r g v ) ;
QLabel l L a b e l ;
//Создаём виджет QLabel — метка
l L a b e l . s e t T e x t ( " I am W i d g e t ! " ) ;
//Задаём текст для метки
l L a b e l . setGeometry ( 2 0 0 , 2 0 0 , 3 0 0 , 1 5 0 ) ;
//Задаём размеры — позицию (x, y) ширину и высоту. Задаём выравнивание текста
l L a b e l . s e t A l i g n m e n t ( Qt : : AlignHCenter | Qt : : AlignVCent er ) ;
//Класс QFont используют для настройки параметров шрифта.
//Выбираем семейство шрифтов Arial Black и размер 12.
QFont l B l a c k F o n t ( " A r i a l B l a c k " , 1 2 ) ;
l L a b e l . s e t F o n t ( l B l a c k F o n t ) ; //Задаём шрифт для метки
l L a b e l . show ( ) ; //Вызываем метод show() для показа метки на экране.
return l A p p l i c a t i o n . e x e c ( ) ; //Запускаем программу на выполнение exec() выполняет
//цикл обработки событий. Программа ожидает действия пользователя и выполняет их обработку.
}
Как видим, элементы, из которых состоят интерфейсы в Qt, имеют собствен-
ные позицию и размер — так называемую «геометрию» — и, таким образом,
занимают соответствующую прямоугольный участок на экране (см. рис. 13.1).
Также каждый из элементов имеет настройки, которые определяют его поведе-
ние и вид
.
Рис. 13.1: Первый оконный проект
Для создания структуры виджеты организовывают в иерархию по принципу
«часть — целое». Каждый из виджетов может содержать другие виджеты. Та-
кой визуальный элемент становится «родителем» (родительским виджетом)
для элементов, которые он содержит. Отметим, что такие отношения не следу-
ет путать с наследованием в C++ — отношениями между классами в программе.
Отношения между виджетами являются отношениями между объектами. Такие
отношения порождают несколько последствий:
• родительский элемент будет отвечать за удаление дочернего элемента: если
родительский виджет удалят — то он автоматически удалит и все дочерние
элементы;
• родительский виджет размещает дочерние виджеты внутри себя, части до-
черних виджетов, которые выходят за пределы родителя будут невидимы-
ми;
Программирование на языке С++ в среде Qt Creator
13.1. Виджеты (Widgets)
357
• часть состояния родительского виджета передаётся дочерним — это каса-
ется некоторых свойств (видимость, активность) и стилей, которые накла-
дываются на визуальный элемент.
Виджеты, которые не имеют родителя (виджеты верхнего уровня), имеют
вид отдельных окон в программе. Рассмотрим пример. Назовём новый проект
ParentExample
. Файл проекта будет содержать обычные для GUI-проекта на-
стройки:
TEMPLATE = app
TARGET = ParentExample
QT += w i d g e t s
Для виджета, который мы будем использовать в качестве главного окна созда-
дим новый класс. Для этого в категории Files and Classes (Файлы и классы)
выберем раздел С++ и выберем С++ Class (см. рис. 13.2).
Рис. 13.2: Мастер создания нового класса
Следующим шагом будет создание нескольких элементов на окне. Для это-
го откроем файл parentwidget.cpp и изменим код конструктора класса. Для
отображения элементов достаточно создать их в конструкторе класса и задать
ParentWidget
как отца для них. Код parentwidget.cpp выглядит так:
#include " p a r e n t w i d g e t . h "
#include
#include
#include
ParentWidget : : ParentWidget ( QWidget ∗ p a r e n t ) :
QWidget ( p a r e n t )
{
//Создаём метку, указывая родительский виджет — this, то есть экземпляр класса ParentWidget.
QLabel ∗ l L a b e l=new QLabel ( t h i s ) ;
//Позиция относительно левого верхнего угла родительского виджета.
l L a b e l −>setGeometry ( 5 0 , 0 , 1 0 0 , 3 0 ) ;
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.
358
Do'stlaringiz bilan baham: |