Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
QConicalGradient
Конические градиенты интерполируют цвета против часовой стрелки вокруг центральной точки.
Цвета в градиенте определяется с помощью стоп-точки типа QGradientStop, т.е. положение и цвет. Используйте QGradient:: setColorAt() или QGradient:: setStops() для определения фиксированных точек. В дополнение к функциям, унаследованных от QGradient, класс QConicalGradient обеспечивает угол – angle () и центр - center (), эти функции, возвращающие угол начала и центр градиента.
Отмечу, что функция setSpread () не оказывает никакого влияния на конических градиентов. Причина в том, что конический градиент закрыт по определению, т.е. конический градиент заполняет всю окружность от 0 – 360 градусов, в то время как граница радиального или линейного градиента могут быть указаны через их радиусы либо конечные точки останова, соответственно.
Пришло время показать как это работает на простом примере. я создал проект и разместил на форме 3 элемента label, для того что б четко определить границы вывода каждого градиента. Выглядит это так
Внимание!! – На элементах label установлено свойство autoFillBackgound, если его не убрать после размещения компонентов, то Gradient будет закрыт элементом Label.
Переходим к коду (*.h):
| #ifndef DIALOG_H
#define DIALOG_H
#include < QDialog>
#include < QtCore>
#include < QtGui>
// Библиотеку градиентов
#include < QLinearGradient>
#include < QRadialGradient>
#include < QConicalGradient>
namespace Ui {
class Dialog;
}
class Dialog: public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private:
Ui:: Dialog *ui;
// стандартное объявление
protected:
void paintEvent(QPaintEvent *e);
};
#endif // DIALOG_H
| Исходник (*.cpp)
| #include " dialog.h"
#include " ui_dialog.h"
Dialog:: Dialog(QWidget *parent):
QDialog(parent),
ui(new Ui:: Dialog)
{
ui-> setupUi(this);
}
Dialog:: ~Dialog()
{
delete ui;
}
void Dialog:: paintEvent(QPaintEvent *e)
{
QPainter pain(this);
// располагаем наши градиенты по координатам label's
QLinearGradient lGrad(25, 100, 150, 150);
QRadialGradient rGrad(QPoint(324, 140), 100);
QConicalGradient cGrad(QPoint(536, 140), 100);
// цвет зададим рандомно, для каждого градиента
lGrad.setColorAt(0.0, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
lGrad.setColorAt(0.5, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
lGrad.setColorAt(1.0, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
rGrad.setColorAt(0.0, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
rGrad.setColorAt(0.5, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
rGrad.setColorAt(1.0, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
cGrad.setColorAt(0.0, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
cGrad.setColorAt(0.5, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
cGrad.setColorAt(1.0, QColor(qrand() % 255, qrand() % 255, qrand() % 255));
// выбелим участки под каждый градиент и отразим его
QRect lRec(10, 40, 200, 200);
pain.fillRect(lRec, lGrad);
QRect rRec(224, 40, 200, 200);
pain.fillRect(rRec, rGrad);
QRect cRec(436, 40, 200, 200);
pain.fillRect(cRec, cGrad);
}
| В итоге получится так:
Попробуйте изменить размеры формы и обратите внимание на то как изменяется цветовая гамма.
|