2011-05-12 3 views
0

QTouchEvents로 QGraphicsObject를 구현하고 sceneEvent 함수를 다시 구현했습니다.QGraphicsObject에 대한 sceneEvent의 위치에 대한 계산을 수행 할 수없는 이유는 무엇입니까?

bool LynxItem::sceneEvent(QEvent *event) 
{ 
    //qDebug() << "LynxItem::sceneEvent:" << itemId; 
    switch (event->type()) { 
    case QEvent::Gesture: 
    { 
     qDebug() << "LynxItem::sceneEvent:Gesture" << itemId; 
     return gestureEvent(static_cast<QGestureEvent*>(event)); 
     break; 
    } 
    case QEvent::TouchBegin: 
    case QEvent::TouchUpdate: 
    case QEvent::TouchEnd: 
    { 
     qDebug() << "LynxItem::sceneEvent:TouchUpdate" << itemId; 
     QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event); 
     QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints(); 
     const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last(); 
     /* This doesn't allow two objects to move at the same time */ 
     //setPos (touchPoint1.scenePos() - touchPoint1.pos()); 
     /* This does work but the item is always moved from top left */ 
     setPos(touchPoint1.scenePos()); 
     event->accept(); 
     break; 
    } 
    default: 
     return QGraphicsItem::sceneEvent(event);; 
    } 
    return true; 
} 

내 문제는 내가 항목을 만질 때 오른쪽 상단의 항목이 접촉 지점에옵니다. 나는 터치 한 지점을 내부에서 상쇄하고 싶습니다. 그러나 내가 할 때 한 번에 하나의 항목 만 이동할 수 있습니다.

답변

1

좋아, 내 자신의 질문에 대답 :

setPos (touchPoint1.scenePos() - touchPoint1.pos()); 

가 잘못입니다. TouchBegin에 나는 touchPoint1.pos()를 저장해야합니다 :

m_TouchOffset = touchPoint1.pos(); 

그런 다음 첫 번째 위치를 사용하는 대신

setPos (touchPoint1.scenePos() - m_TouchOffset);