2016-08-03 7 views
0

QT에서 그리기와 같은 낙서를 구현하는 올바른 방법은 무엇입니까? 또한 그려진 경로의 일부를 지울 수 있습니까?QT에서 패스를 지울 수있는 낙서 그리기를 구현하는 방법은 무엇입니까?

그림에 포인트 (QImage)로 타원을 추가하여 그림이 구현 된 몇 가지 예를 보았지만 이해하는 한 그려진 선을 삭제할 수 없습니까? 내가 생각해온 한 가지는 QPainterPaths를 구현하는 것입니다. 마우스를 끈 상태에서 새 경로를 시작하고 마우스를 움직이면 마우스 위치의 경로에 점을 추가하고 마우스를 놓으면이 경로가 끝납니다. 무승부 이벤트에서 QPainterPaths 배열을 통해 각각을 그립니다. 지울 때, 배열의 모든 QPainterPath를 살펴보고 어떤 점이 충돌하는지 검사합니다. 그렇다면 배열에서 전체 경로를 제거하여 효과적으로 지울 수 있습니다.

몇 가지 유효한 접근 방식입니까, 아니면 QPath를 사용하여 달성 할 수없는 것입니까?

더 좋고 똑똑한 방법이 있습니까? ,

/* 
* QList<QGraphicsPathItem *> mList; 
* bool mErase; 
* QPainterPath * mCurrentPath; 
* QPainterPathStroker mStroker; 
*/ 

void ScribbleArea::mousePressEvent (QGraphicsSceneMouseEvent* event) 
{ 
    if(!mErase) 
    { 
     mCurrentPath = new QPainterPath(); 
     mCurrentPath->moveTo(event->lastScenePos()); 
     mList.append(addPath(mStroker.createStroke(*mCurrentPath), QPen(Qt::red), QBrush(Qt::red))); 
    } 
    QGraphicsScene::mousePressEvent(event); 
} 

void ScribbleArea::mouseMoveEvent (QGraphicsSceneMouseEvent* event) 
{ 
     if(!mErase) 
     { 
      mCurrentPath->lineTo(event->lastScenePos()); 
      mList[mList.count()-1]->setPath(mStroker.createStroke(*mCurrentPath)); 
     } 
     else 
     { 
      for(int i=0; i < mList.count(); i++) 
      { 
       if(mList[i]->isUnderMouse()) 
       { 
        removeItem(mList[i]); 
        delete mList[i]; 
        mList.removeAt(i); 
       } 
      } 
     }  
     QGraphicsScene::mouseMoveEvent(event); 
} 

이 두 가지 핵심 기능은 다음과 같습니다

+0

죄송하지만 질문은 SO 너무 광범위하고 안 좋은 적합합니다. –

답변

0

이 내 질문에 결국 누군가가 유용한 답을 찾을 수 있습니다, 조금 넓은 경우에도, 실제로 유효한, 또는 적어도 작업 방법이 될 것 같다 on mousePressEvent 새 경로를 시작하여 현재 마우스 위치로 이동 한 다음 QGraphicsScene에 경로를 추가하여 mouseMoveEvent 함수에서 사용할 QGraphicsPathItem에 대한 포인터를 가져옵니다.

mouseMoveEvent 함수에서 먼저 현재 지우기 또는 그리기 중인지 확인합니다. 드로잉의 경우, 마지막 점에서 현재 마우스 위치까지 선을 추가하고 경로를 QGraphicsScene에 다시 추가합니다. 그렇지 않으면 새로운 선이 표시되지 않습니다 (더 나은 방법이있을 수 있습니다. 개선이 필요함). 그리기위한 것입니다. 삭제할 경우 모든 경로 목록을 살펴보고 마우스 아래에 경로가 있는지 확인합니다 (예, 제거).

이것은 현재 초안이며 향후 개선 될 예정입니다.

도면/낙서의 일부 멋진 예 :

Some awesome example of the drawing