Глава 14. Создание элементов графического интерфейса
ные рамки, поля, панели и т. д. Для рисования примитивов в Qt пользуются
специальным классом QPainter.
QPainter
обладает богатым набором методов для рисования различных гео-
метрических примитивов, надписей и частей изображений. Для рисования он ис-
пользует объекты класса QPaintDevice, реализующие область для вывода гра-
фической информации (на экран, область памяти, на принтер и т. д.). Класс
QWidget
как раз наследует от классов QObject и QPaintDevice, что позволяет
использовать QPainter для рисования интерфейса.
Оконная система и Qt следят за изменениями размеров, позиции, видимости
окон и отдельных виджетов в программе и направляют специальные события,
которые сообщают каждый виджет о необходимости обновления вида. В вирту-
альном обработчике paintEvent() виджеты имеют возможность использовать
QPainter
для собственного отражения. В нашем примере мы определим обра-
ботчик события QPaintEvent.
#include c l a s s L e d I n d i c a t o r : public QWidget
{
Q_OBJECT
Q_PROPERTY( Q S t r i n g t e x t READ t e x t WRITE s e t T e x t )
Q_PROPERTY( bool turnedOn READ isTurnedOn WRITE setTurnedOn NOTIFY
s t a t e T o g g l e d )
public :
. . . . .
QSize minimumSizeHint ( ) const ;
. . . .
protected :
void p a i n t E v e n t ( QPaintEvent ∗ ) ;
. . . . .
} ;
И добавим реализацию для него:
void L e d I n d i c a t o r : : p a i n t E v e n t ( QPaintEvent ∗ pEvent )
{
//Создаём объект QPainter и указываем QPaintDevice текущий виджет
QPainter l P a i n t e r ( t h i s ) ;
//Используем сглаживание при рисовании для лучшего вида
l P a i n t e r . s e t R e n d e r H i n t ( QPainter : : A n t i a l i a s i n g ) ;
//Центр окружности индикатора QPoint — класс для описания точки
QPoint l L e d C e n t e r ( cLedRadius + 1 , h e i g h t ( ) / 2 ) ;
//Фигура, которую мы будем рисовать QPainterPath — класс для описания фигуры
//состоящей из нескольких примитивов
QPainterPath l P a t h ;
//Добавляем окружность
l P a t h . a d d E l l i p s e ( l L e d C e n t e r , cLedRadius , cLedRadius ) ;
l P a i n t e r . s a v e ( ) ; //Сохраняем настройки после всех изменений мы восстановим их для
//рисования подписи
//Создаём радиальный (окружностями) градиент указываем центр для градиента и радиус
Q R a d i a l G r a d i e n t l G r a d i e n t ( l L e d C e n t e r , cLedRadius ) ;
i f ( mIsTurnedOn ) //Устанавливаем цвет границы и градиент
{
//для включённого и выключенного состояний
//Задаём объект QPen — настройки рисования контуров
//Используем константу для задания цвета контура в конструкторе QPen
l P a i n t e r . s e t P e n ( QPen ( Qt : : darkGreen ) ) ;
//Задаём цвет в разных точках (0 — центр, 1 — край) цвет будет равномерно изменяться
//Для задания цвета пользуемся текстовым шестнадцатеричным RGB обозначением
//— неявное преобразование в QColor
l G r a d i e n t . s e t C o l o r A t ( 0 . 2 , " # 7 0 F F 7 0 " ) ;
l G r a d i e n t . s e t C o l o r A t ( 1 , " # 0 0 C C 0 0 " ) ;
Программирование на языке С++ в среде Qt Creator