2017-11-01 8 views
8

제목에서 알 수 있듯이 QPaintPathItem에 적용되는 QPainterPath 다른 색상의 하위 경로에 색상을 지정하거나 QGradient QPen으로 PathItem의 색상을 변경하는 방법을 찾고 있습니다.어떻게 QPainterPath 하위 경로에 색상을 다르게 지정할 수 있습니까?

궁극적으로 외부 변수를 기반으로 색상을 변경하는 단일 선을 시각적으로 그릴 수있는 올바른 솔루션을 찾으려고합니다.

저는 모든 것을 그릴 때 QGraphicsScene을 사용하고 있습니다.

내 현재 솔루션을 사용하면 각 QPens와 다르게 색칠 된 여러 QGraphicsPathItem을 만들 수 있습니다. 데이터를 가져올 때 해당 PathItem과 관련된 PainterPath를 채 웁니다. 이것은 내가 필요로하는 여러 가지 색깔의 선을 보여 주지만 선들은 눈에 띄게 단절되어있다.

색 변경 중에 QPainterPath의 하위 경로를 숨기거나 단일 PathItem에 적용된 그라데이션을 변경할 수 있어야합니다. 아니면 내가 놓친 또 다른 접근법이있을 수 있습니다. 도움이 될 것입니다.

- 편집 : 나는 현재 도면을하고있는 중이 야 어떻게 내 질문에 대한 해결책에 언급 한 바와 같이

이있다. 다시 말하지만, 저는 GraphicsScene을 사용하고 있습니다. 여기

Bearing Formula calculations in GraphicsScene producing erratic results

내가 할 노력하고있어 것입니다. Desired Result

줄에서 알 수 있듯이 외부 변수에 의해 그려지는대로 색상이 바뀝니다. 라인이 항상 직선이 아니기 때문에 Qgradient가 작동하지 않을 수도 있습니다. 색상은 선을 따라 흐를 필요가 있습니다.

여기에 무슨 일이 일어나고있는 것입니다 :

enter image description here

당신이 볼 수 있듯이, 레드 라인 (PathItem은)는 최근 새로운 위치로 볼 어디에서 이동합니다.

동작을보다 명확하게 이해하려면이 줄이 시간 경과에 따라 그려지고 있다고 상상해보십시오. 빨간색으로 시작하면 곧 변수가 설정되고 그려지는 선분의 ​​색이 주황색으로 바뀝니다. 선의 빨간색 부분은 그대로 남아있어서 그 당시에 변수의 상태가 무엇인지를 볼 수 있습니다. 다른 시간에 변수가 조정되고 그에 따라 라인의 새 부분에 적용된 색상이 업데이트됩니다.

선이 그릴 때, 우리는 그것을보고 색이 언제 변했는지 볼 수 있습니다.

나는 이것이 모두 의미가 있기를 바랍니다.

+0

[최소, 완료 및 확인 가능한 예] (https://stackoverflow.com/help/mcve)를 제공하는 것 외에도 사진을 보여줄 수 있습니다. – eyllanesc

+0

내 질문에 편집 됨 – bauervision

+0

문제가 무엇인지 알 수있는 그림을 보여줄 수 있습니다. – eyllanesc

답변

5

QPainterPath을 각 색상마다 하나씩 사용할 수 있습니다. 그리고 그 (것)들을 모두 적당한 색으로 칠하십시오. 선을 그리지 않고 현재 경로 커서를 제거하려면 moveTo()을 사용해야합니다.당신이 전화로 "의 moveTo"와 "에 lineTo"을 느끼는 경우

void Widget::paintEvent(QPaintEvent *event) 
{ 
    QPainterPath redPath; 
    QPainterPath bluePath; 
    redPath.moveTo(0,0); 
    redPath.lineTo(60,60); 
    bluePath.moveTo(60,60); 
    bluePath.lineTo(70,20); 
    redPath.moveTo(70,20); 
    redPath.lineTo(100,100); 
    bluePath.moveTo(100,100); 
    bluePath.lineTo(160,260); 


    QPainter painter(this); 
    painter.setRenderHint(QPainter::HighQualityAntialiasing, true); 
    painter.setPen(QPen(Qt::red, 4)); 
    painter.drawPath(redPath); 
    painter.setPen(QPen(Qt::blue, 4)); 
    painter.drawPath(bluePath); 

} 

render

당신이 전환 경로를 처리하는 lineTo(QPointF, QColor) 기능을 가진 클래스를 소유하고 당신이 모든 QPainterPaths을 캡슐화 할 수, 조금 무겁다 당신이 색을 바꿀 때.

+0

GraphicsView/GraphicsScene 내에서 작동 할 예정입니까? 나는 그것이 내 질문에 명확하지 않았다고 생각한다. 나는 그것을 지금 편집 할 것이다. 이 개념은 제가 GraphicsScene과 함께 작동하도록 할 수있는 한 제가 찾고있는 것입니다. – bauervision

+1

@bauervision 예, 위젯과 같은 GraphicsView/GraphicsScene은'QPainter'를 사용하므로 기본 알고리즘이 동일합니다. –

+0

지금 적용하면 제대로 작동 할 때 올바른 답을 수락합니다. 대기. PathItem에 경로를 적용 할 때 QPen을 적용하지 않는다고 가정합니다. – bauervision