На этом шаге рассмотрим класс виджета надписи QLabel.
Виджет надписи используется для показа состояния приложения или поясняющего текста и представляет собой текстовое поле, текст которого не подлежит изменению со стороны пользователя. Информация, отображаемая этим виджетом, может изменяться только самим приложением. Таким образом, приложение может сообщить пользователю о своем изменившемся состоянии, но пользователь не может изменить эту информацию в самом виджете. Класс виджета надписи QLabel определен в заголовочном файле QLabel.
Виджет надписи унаследован от класса QFrame и может иметь рамку. Отображаемая им информация может быть текстового, графического или анимационного характера, для передачи которой используются слоты setText(), setPixmap() и setMovie().
Расположением текста можно управлять при помощи метода setAlignment(). Метод использует большое количество флагов, некоторые из которых указаны в табл. 1. Обратите внимание, что значения не пересекаются, и это позволяет комбинировать их друг с другом с помощью логической операции | (ИЛИ). Наглядным примером служит значение AlignCenter, составленное из значений AlignVCenter и AlignHCenter.
| Расположение текста слева | |
| Расположение текста справа | |
| Центровка текста по горизонтали | |
| Растягивание текста по всей ширине | |
| Расположение текста вверху | |
| Расположение текста внизу | |
| Центровка текста по вертикали | |
| Центровка теста по вертикали и горизонтали |
Приведем пример использования надписи для вывода текста, оформленного в формате HTML (рис. 1), анимации (рис. 2) и растрового изображения (рис. 3).

Рис.1. Отображение информации виджетом надписи в формате HTML

Рис.2. Отображение анимации виджетом надписи

Рис.3. Отображение графической информации виджетом надписи
Рассмотрим как реализовано это приложение:
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QMovie>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
app.setApplicationDisplayName("Надпись");
//при создании виджета надписи lbl,
//первым параметром в конструктор
//передается текст в формате HTML
QLabel lbl1("<H1><CENTER>QLabel — HTML-формат</CENTER></H1>"
"<H2><CENTER>Картинка</CENTER><H2>"
"<CENTER><IMG BORDER=\"0\" SRC=\"koala.jpg\"></CENTER>"
"<H2><CENTER>Список</CENTER><H2>"
"<OL><LI>Один</LI>"
" <LI>Два</LI>"
" <LI>Три</LI>"
"</OL>"
"<H2><CENTER>Начертание</CENTER><H2>"
"<CENTER><FONT COLOR=RED>"
" <B>Жирный</B>, <I>Курсив</I>, <U>Подчеркнутый</U>"
"</FONT></CENTER>"
"<H2><CENTER>Таблица</CENTER></H2>"
"<CENTER> <TABLE>"
" <TR BGCOLOR=#ff00ff>"
" <TD>1,1</TD><TD>1,2</TD><TD>1,3</TD><TD>1,4</TD>"
" </TR>"
" <TR BGCOLOR=YELLOW>"
" <TD>2,1</TD><TD>2,2</TD><TD>2,3</TD><TD>2,4</TD>"
" </TR>"
" <TR BGCOLOR=#00f000>"
" <TD>3,1</TD><TD>3,2</TD><TD>3,3</TD><TD>3,4</TD>"
" </TR>"
"</TABLE> </CENTER>"
);
lbl1.show(); //отображаем надпись на экране
//создаем новую надпись
QLabel lbl2;
//создаем объект анимации
QMovie *m = new QMovie("sun.gif");
//передаем с помощью слота setMovie файл sun.gif в надпись
lbl2.setMovie(m);
//запускаем анимацию
m->start();
lbl2.show();
//создается объект растрового изображения QPixmap
QPixmap pix;
//вызовом метода load() в него загружается файл Penguins.jpg
pix.load("Penguins.jpg");
//создаем виджет надписи
QLabel lbl3;
//вызовом метода resize() размеры виджета надписи
//приводятся в соответствие с размерами растрового изображения
lbl3.resize(pix.size());
//вызов метода setPixmap()
//устанавливает в виджете само растровое изображение
lbl3.setPixmap(pix);
lbl3.show();
return app.exec();
}Файлы приложения можно взять здесь.
При помощи метода setBuddy() виджет надписи может ассоциироваться с любым другим виджетом. Если текст надписи содержит знак &, то символ, перед которым он стоит, будет подчеркнутым. При совместном нажатии этого символа с клавишей <Alt> фокус перейдет к виджету, установленному методом setBuddy(). На рис. 4 показаны такие виджеты.

Рис.4. Использование амперсанта в виджете надписи
Приведем текст программы:
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QSpinBox>
#include <QVBoxLayout>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
app.setApplicationDisplayName("Амперсант");
//виджет wgt класса QWidget является
//виджетом верхнего уровня, т. к. по умолчанию
//его конструктор присваивает указателю на виджет-предок значение 0
QWidget wgt;
//в виджете надписи plblName (Имя) в тексте
//символ И определен как символ для быстрого доступа
QLabel* plblName = new QLabel("&Имя:");
//создается виджет однострочного текстового поля
QLineEdit* ptxtName = new QLineEdit;
//вызов метода setBuddy() связывает виджет надписи
//с созданным текстовым полем,
//используя указатель на поле в качестве аргумента
plblName->setBuddy(ptxtName);
QLabel* plblAge = new QLabel("&Возраст:");
QSpinBox* pspbAge = new QSpinBox;
plblAge->setBuddy(pspbAge);
//установка компоновки для вертикального размещения
QVBoxLayout* pvbxLayout = new QVBoxLayout;
pvbxLayout->addWidget(plblName);
pvbxLayout->addWidget(ptxtName);
pvbxLayout->addWidget(plblAge);
pvbxLayout->addWidget(pspbAge);
wgt.setLayout(pvbxLayout);
wgt.show();
return app.exec();
}Файлы приложения можно взять здесь.
На следующем шаге рассмотрим работу с индикатором прогресса.