Шаг 198.
Библиотека Qt.
Градиенты

    На этом шаге рассмотрим градиенты.

    Градиент — это плавный переход от одного цвета к другому. В настоящее время применение градиентов стало очень популярно, ведь их использование может придать эффект объемности в ваших приложениях. В основе градиентов лежит гладкая интерполяция между двумя и более цветовыми значениями.

    Qt предоставляет три основных типа градиентов: линейный (linear), конический (conical) и радиальный (radial).

    Линейные градиенты реализует класс QLinearGradient. Они задаются двумя цветовыми точками контроля и несколькими точками останова (color stops) на линии, соединяющей цвета этих точек. Рисунок 1 иллюстрирует эту возможность.


Рис.1. Отображение линейного градиента

QPainter painter(this);
QLinearGradient gradient(0, 0, width(), height());
 /*Задаем три цвета на трех различных позициях между  двумя точками контроля.
 Позиции точек задаются вещественными значениями  от 0 до 1, где 0 представляет
 собой первую контрольную точку, а 1 — вторую. Цвета между этими точками будут
 интерполированы*/
gradient.setColorAt(0, Qt::red);
gradient.setColorAt(0.5, Qt::green);
gradient.setColorAt(1, Qt::blue);
painter.setBrush(gradient);
painter.drawRect(rect());

    Файлы приложения можно взять здесь.

    Конический (conical) градиент реализуется классом QConicalGradient и задается центральной точкой и углом. Распространение цветов вокруг центральной точки соответствует повороту часовой стрелки. В листинге приведена реализация конического градиента, а результат показан на рис. 2.


Рис.2. Отображение конического градиента

QPainter painter(this);
QConicalGradient gradient(width()/2,height()/2,0);
gradient.setColorAt(0, Qt::red);
gradient.setColorAt(0.4, Qt::green);
gradient.setColorAt(0.8, Qt::blue);
gradient.setColorAt(1, Qt::red);
painter.setBrush(gradient);
painter.drawRect(rect());

    Файлы приложения можно взять здесь.

    Радиальный (radial) градиент реализует класс QRadialGradient и задается центральной точкой, радиусом и точкой фокуса. Центральная точка и радиус задают окружность. На распространение цветов за пределами точки фокуса влияет центральная точка или точка, находящаяся внутри окружности. Пример реализации такого градиента приведен в листинге ниже, а результат показан на рис. 3.


Рис.3. Отображение радиального градиента

QPainter painter(this);
QPointF ptCenter(rect().center());
QRadialGradient gradient(ptCenter, width()/2, ptCenter);
gradient.setColorAt(0, Qt::red);
gradient.setColorAt(0.5, Qt::green);
gradient.setColorAt(1, Qt::blue);
painter.setBrush(gradient);
painter.drawRect(rect()); 

    Файлы приложения можно взять здесь.

    На следующем шаге рассмотрим технику сглаживания.




Предыдущий шаг Содержание Следующий шаг