2016-11-03 3 views
0

그래픽보기 프레임 워크를 기반으로하는 매핑 응용 프로그램을 만들고 있습니다. 드래그 할 때 일부 줄이 사라지는 것을 제외하고는 모두 잘 작동합니다. 보기에서 판단해야 할 항목 인 것처럼 보이지만 사실은 그 항목의 일부입니다. 아래는 스크린 샷입니다. 내가 QGraphicsViewQGraphicsItem 서브 클래스 보기를 끌 때 QGraphicsItem이 사라집니다.

enter image description here

enter image description here은 볼에 연결되어 현장에 항목을 추가했다. 드래그 기능을 구현하려면 서브 클래스의 생성자에 setDragMode()을 사용하기 만하면됩니다. 그리고 MapShape.cpp에서
:

QRectF Polyline::boundingRect() const 
{ 
    return QRectF(minX-pen.width()/2, minY-pen.width()/2, maxX-minX+pen.width(), maxY-minY+pen.width()); 
} 

void Polyline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    Q_UNUSED(option); 
    Q_UNUSED(widget); 

    pen.setCosmetic(true); 
    painter->setPen(pen); 
    for(auto iter = points.begin(); iter != points.end()-1; ++iter) 
    { 
     painter->drawLine(*iter, *(iter+1)); 
    } 
} 

누군가 도와 주 시겠어요? 고맙습니다!

답변

0

코드가 완전하지 않아서 가장 확실한 이유는 boundingRect 결과가 올바르지 않거나 minX, minY 등 멤버를 변경하기 전에 prepareGeometryChange를 호출하지 않았기 때문일 수 있습니다. 또는 펜 너비. 실수로 boundingRect 외부로 그려서 ItemClipsToShape 플래그를 설정하면 다음과 같은 동작을 볼 수 있습니다. ItemClipsToShape를 사용하지 않으면 그림이 계속 성공하지만 항목을 이동할 때 유물이 생성됩니다. ItemClipsToShape를 사용하면 화가가 경계 밖으로 그려지지 않습니다.

+0

boundingRect를 상기시켜 주셔서 감사합니다. 방금 실수로 경계를 계산하고 이제는 문제가 해결되었습니다. :) –