Почему я не могу выполнить вычисление для позиции в sceneEvent для QGraphicsObject?

#qt #touch #multi-touch #qgraphicsitem #qgraphicsscene

#qt #коснитесь #мультитач #qgraphicsitem #qgraphicsscene

Вопрос:

Я реализовал QGraphicsObject с помощью QTouchEvents и переопределил функцию 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 amp;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());
  

Неверно. В начале работы с сенсорным экраном я должен сохранить touchPoint1.pos():

 m_TouchOffset = touchPoint1.pos();
  

Тогда используйте эту первую позицию вместо

 setPos ( touchPoint1.scenePos() - m_TouchOffset);