2009-10-30 1 views
0

나는 QGraphicsLineItem에 의해 연결된 QGraphicsScene에 QGraphicsSvgItem을 많이 가지고있다. 이 쇼는 나무 구조의 그래프입니다.Qt에서 불투명하지 않은 그래픽 항목으로 클리핑을 제어하려면 어떻게해야합니까?

내가하고 싶은 일은 선택한 하위 트리를 제외하고 모든 것이 투명 해지는 기능을 제공하는 것입니다. 일종의 "이 하위 트리를 강조 표시"기능. 그 부분은 쉬웠지만 결과는 반투명 한 SVG를 통해 볼 수 있기 때문에 추악합니다.

나는 장면의 다른 QGraphicsItem을 svg 항목에 클립하는 방법을 찾고 있는데, 이는 svg가 배경에 반투명 한 효과가 있음을 나타냅니다.

나는이 코드가 svg 's를 사용하지 않는다는 것을 알고 있지만 당신이 그렇게 생각한다면 당신은 그 자신을 대체 할 수 있다고 생각한다.

int main(int argc, char *argv[]) { 
    QApplication app(argc, argv); 
    QGraphicsScene scene; 
    for(int i = 0; i < 10; ++i) { 
     QGraphicsLineItem* line = new QGraphicsLineItem; 
     line->setLine(i * 25.0 + 1.0, 0, i * 25.0 + 23.0, 0); 
     scene.addItem(line); 
    } 

    for(int i = 0; i < 11; ++i) { 
     QGraphicsEllipseItem* ellipse = new QGraphicsEllipseItem; 
     ellipse->setRect((i * 25.0) - 9.0, -9.0, 18.0, 18.0f); 
     ellipse->setBrush(QBrush(Qt::green, Qt::SolidPattern)); 
     ellipse->setOpacity(0.5); 
     scene.addItem(ellipse); 
    } 
    QGraphicsView view(&scene); 
    view.show(); 
    return app.exec(); 
} 

줄의 원안에 보이지 않게하고 싶습니다. OpenGL 렌더링을 사용하여 depth-buffer 및 stencil 버퍼를 사용하지 않으려 고 노력했습니다.

반투명하더라도 QGraphicsSvgItem (또는 QGraphicsEllipseItem의 예제 코드에서)을 계속 클리핑하려면 어떻게합니까?

+0

아, 신청서의 전체 소스를보고 싶은 사람은 http://github.com/jjacobsson/calltree/tree/cts – JJacobsson

답변

0

가장 좋은 해결책은 QGraphicsScene과 그래픽 항목을 하위 클래스로 만드는 것입니다.
씬의 다른 클래스와 다른 그래픽 항목의 여러 클래스를 만듭니다. 그런 다음 각 항목에 대해 "페인트"방법을 사용하여 필요한 불투명도로 그릴 수 있습니다.
이 경우 각 항목의 모양과 경계 사각형을 제어 할 수 있으므로 클리핑 문제도 해결할 수 있습니다.
또 다른 멋진 기능은 항목을 함께 연결하여 어딘을 클릭하면 여러 항목의 가시성 설정을 한 번에 설정할 수 있도록하는 것입니다.
즉, 전체 장면을보다 잘 제어 할 수 있으므로 이러한 하위 클래스를 학습하고 쓰는 것이 좋은 투자입니다.
예를 들어 사용자 정의 그래픽 항목이 그려지는 곳은 Colliding Mice Example입니다.

+0

예. 나는 그렇게한다. 하지만 개체의 그림을 어떻게 수정하려고해도 원하는 결과를 얻지 못합니다. 충돌하는 마우스 예를 더 세게 보일 것입니다. – JJacobsson

관련 문제