Russian Qt Forum
Ноябрь 23, 2024, 22:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос про использование QPainterPath  (Прочитано 5934 раз)
dr_Begemot
Гость
« : Август 03, 2010, 13:49 »

Рисую фигуры на QPainterPath. Фигуры с заливкой.
Проблема в том, что в случае если фигуры пересекаются, пересекаемая область не заливается...
Можно ли это как ни будь исправить?

Код:
	QPainterPath path;

double x = 150, y = 100, w = 50;
double x2 = 175;
path.moveTo(x,y);
path.lineTo(x+w,y);
path.lineTo(x+w,y+w);
path.lineTo(x,y+w);
path.closeSubpath();

path.moveTo(x2,y);
path.lineTo(x2+w,y);
path.lineTo(x2+w,y+w);
path.lineTo(x2,y+w);
path.closeSubpath();


Теперь отображаем на painter:
Код:
	QPen pen( lineColor() );
QBrush brush( lineColor() );

QPen oldPen = painter->pen();
QBrush oldBrush = painter->brush();

painter->setPen(pen);
painter->setBrush(brush);

painter->drawPath(path);

painter->setPen(oldPen);
painter->setBrush(oldBrush);

Получается, что заливки в месте пересечения квадратов нет. Можно ли как-то исправить это не переписывая весь алгоритм рисования фигур на QPainter? Фигуры должны заливаться цветом полностью.

Спасибо)
Записан
dr_Begemot
Гость
« Ответ #1 : Август 03, 2010, 14:11 »

Решено, нужно сделать так:
path.setFillRule(Qt::WindingFill);
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Январь 24, 2012, 15:56 »

почему тогда на графической сцене это не работает?

Код:
QPainterPath    QRailSwitch::shape() const
{
    QPainterPath    path;

    path.setFillRule(Qt::WindingFill);
   
    path.addRect(fjointRect);
    path.addPolygon(fhead.polygon());
    path.addPolygon(fbranchA.polygon());
    path.addPolygon(fbranchB.polygon());

    return path;
}

на рисунке показано как отображается эелемент.
у меня фигура состоит из трех полигонов, соединенных в одной точке посредине и прямоугольника, который находится над центральной точкой.
нужно что бы shape возвращала сплошную фигуру без прозрачныъ пересекающихся областей.
« Последнее редактирование: Январь 24, 2012, 16:03 от Fregloin » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 22.