Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 为什么我无法为QGraphicsObject的sceneEvent中的位置执行计算?_Qt_Touch_Multi Touch_Qgraphicsitem_Qgraphicsscene - Fatal编程技术网

Qt 为什么我无法为QGraphicsObject的sceneEvent中的位置执行计算?

Qt 为什么我无法为QGraphicsObject的sceneEvent中的位置执行计算?,qt,touch,multi-touch,qgraphicsitem,qgraphicsscene,Qt,Touch,Multi Touch,Qgraphicsitem,Qgraphicsscene,我已经用QTouchEvents实现了QGraphicsObject,并重新实现了sceneEvent函数 bool LynxItem::sceneEvent(QEvent *event) { //qDebug() << "LynxItem::sceneEvent:" << itemId; switch (event->type()) { case QEvent::Gesture: { qDebug() <&l

我已经用QTouchEvents实现了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;
}
bool LynxItem::sceneEvent(QEvent*事件)
{

//qDebug()好的,回答我自己的问题:

setPos ( touchPoint1.scenePos() - touchPoint1.pos());
不正确。在TouchBegin上,我应该存储touchPoint1.pos():

然后使用第一个位置

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