crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Градиентная заливка с использованием маршрута
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 9.10.2010, 19:42
  нашёл в справке вот такой код - выводит полигон, закрашенный линейным градиентом.
Раскрывающийся текст
 QLinearGradient myGradient;
QPen myPen;
QPolygonF myPolygon;

QPainterPath myPath;
myPath.addPolygon(myPolygon);

QPainter painter(this);
painter.setBrush(myGradient);
painter.setPen(myPen);
painter.drawPath(myPath);


Попробуй попытать не QLinearGradient, а QGradient
greh Дата 9.10.2010, 19:22
 
Цитата(Алексей1153 @ 9.10.2010, 21:59) *
Цитата(greh @ 9.10.2010, 21:16) *
А есть ли разница для меня?

разница конечно есть - если в шарпе готовый инструмент есть, а в Qt - нету, то вот тебе и разница ))

Картинка наводит на мысль, что использованы полигоны с типом заливки - градиент между вертексами
Что в свою очередь наводит на мысль об использовании OpenGL (в шарпе - DX)



OpenGL это уж на крайний случай. Может с "костылями" как нибудь сделать? Может как то через path? Ну подкиньте идею пожалуйста.
Алексей1153 Дата 9.10.2010, 18:59
 
Цитата(greh @ 9.10.2010, 21:16) *
А есть ли разница для меня?

разница конечно есть - если в шарпе готовый инструмент есть, а в Qt - нету, то вот тебе и разница ))

Картинка наводит на мысль, что использованы полигоны с типом заливки - градиент между вертексами
Что в свою очередь наводит на мысль об использовании OpenGL (в шарпе - DX)
greh Дата 9.10.2010, 18:16
 
Цитата(Алексей1153 @ 9.10.2010, 19:55) *
а скриншот-пример то можно? А то не совсем понятно, о чём речь.

[offtop]
в раскрывающемся тексте пример не столько из студии, сколько из C#
[/offtop]



А есть ли разница для меня? Я ведь спрашиваю как сделать в Qt а не VS на конкретном языке.

Скрин:

Алексей1153 Дата 9.10.2010, 16:55
  а скриншот-пример то можно? А то не совсем понятно, о чём речь.

[offtop]
в раскрывающемся тексте пример не столько из студии, сколько из C#
[/offtop]
greh Дата 9.10.2010, 13:12
  Вообщем нужно сделать заливку не линейным градиентом а "маршрутным" т.е. тот же линейный, только setColorAt не от 0 до 1 а в координатах. Допустим от 0 (x),10 (y) до 10,10 белый-красный, от 10,10 до 100,50 он красно чёрный, и т.д. На VS2010 это делается примерно так:
Раскрывающийся текст
Создание кисти из маршрута:
1.Объявляем переменную класса System.Drawing.Drawing2D.PathGradientBrush.
2.Инициализируем при помощи конструктора new System.Drawing.Drawing2D.PathGradientBrush(path), где path – ранее созданный маршрут.
3.Для каждой точки маршрута, а также для центральной можно задать свой цвет. Для этого используется:
P_Br.SurroundColors = new Color[3] { Color.Red, Color.Blue, Color.Green};
P_Br.CenterColor = Color.Yellow, где P_Br – объект класса System.Drawing.Drawing2D.PathGradientBrush,
Количество цветов должно быть равным ранее объявленному количеству точек в маршруте.
4.Кисть можно использовать при рисования фигуры, сам маршрут (контур фигуры) также можно нарисовать при помощи Grp.DrawPath(Pens.Black, path);
5.Фигура не обязательно должна повторять маршрут (рисование при помощи Grp.FillPath(P_Br, path); ), а может быть больше либо меньше его по геометрическим размерам. Однако, если фигура превосходит размеры маршрута, то часть ее, выступающая за маршрут, не будет заполнена.

Есть идеи? Кроме как сделать на VS это?))
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 16:15