Pregunta

He implementado QgraphicsObject con QTouchEvents y reimplementé la función 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;
}

Mi problema es que cuando toco el elemento, los elementos de la esquina superior derecha llegan al punto táctil.Quiero compensar el punto dentro de donde toqué.Sin embargo, cuando hago eso, solo puedo mover un artículo a la vez.

¿Fue útil?

Solución

OK, para responder a mi propia pregunta:

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

es incorrecto.En el touchbegin debería almacenar touchpoint1.pos ():

m_TouchOffset = touchPoint1.pos();

luego use esa primera posición en lugar

setPos ( touchPoint1.scenePos() - m_TouchOffset);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top