Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: dr_Begemot от Август 03, 2010, 13:49



Название: Вопрос про использование QPainterPath
Отправлено: 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? Фигуры должны заливаться цветом полностью.

Спасибо)


Название: Re: Вопрос про использование QPainterPath
Отправлено: dr_Begemot от Август 03, 2010, 14:11
Решено, нужно сделать так:
path.setFillRule(Qt::WindingFill);


Название: Re: Вопрос про использование QPainterPath
Отправлено: Fregloin от Январь 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 возвращала сплошную фигуру без прозрачныъ пересекающихся областей.