2015-04-05 2 views
0

Я пытаюсь заставить MultiPointTouchArea правильно работать внутри QQuickWidget. Рассмотрим следующий пример QML файл (MultiPointTouchTest.qml):Поведение MultiPointTouchArea в QQuickWidget

import QtQuick 2.0 

Rectangle { 
    width: 360 
    height: 480 
    color: touch1.pressed ? "gray" : "black"; 

    MultiPointTouchArea { 
     anchors.fill: parent 
     minimumTouchPoints: 1 
     maximumTouchPoints: 2 
     enabled: true; 
     touchPoints: [ 
      TouchPoint { id: touch1; objectName: "touch 1"; }, 
      TouchPoint { id: touch2; objectName: "touch 2"; } 
     ] 

     onGestureStarted: { 
      gesture.grab(); 
     } 
     onPressed: { 
      console.log("---onPressed---"); 
      console.log(touch1.objectName, "pressed:", touch1.pressed, touch1.x, touch1.y); 
      console.log(touch2.objectName, "pressed:", touch2.pressed, touch2.x, touch2.y); 
     } 
     onUpdated: { 
      console.log("---onUpdated---"); 
      console.log(touch1.objectName, "pressed:", touch1.pressed, touch1.x, touch1.y); 
      console.log(touch2.objectName, "pressed:", touch2.pressed, touch2.x, touch2.y); 
     } 
     onReleased: { 
      console.log("---onReleased---"); 
      console.log(touch1.objectName, "pressed:", touch1.pressed, touch1.x, touch1.y); 
      console.log(touch2.objectName, "pressed:", touch2.pressed, touch2.x, touch2.y); 
     } 
     onTouchUpdated: { 
      console.log("---onTouchUpdated---"); 
      console.log(touch1.objectName, "pressed:", touch1.pressed, touch1.x, touch1.y); 
      console.log(touch2.objectName, "pressed:", touch2.pressed, touch2.x, touch2.y); 
     } 
    onCanceled: { 
      console.log("---onCanceled---"); 
      console.log(touch1.objectName, "pressed:", touch1.pressed, touch1.x, touch1.y); 
     console.log(touch2.objectName, "pressed:", touch2.pressed, touch2.x, touch2.y); 
     } 
    } 
} 

В файле main.cpp, здесь я использую QQuickWidget или QQuickView, как это:

QQuickWidget* quickWidget = new QQuickWidget(QUrl("qrc:///QML/qml/MultiPointTouchTest.qml")); 
if (quickWidget->status() == QQuickWidget::Ready) { 
    QQuickItem* quickItem = quickWidget->rootObject(); 
    quickItem->setProperty("width", QApplication::desktop()->width()); 
    quickItem->setProperty("height", QApplication::desktop()->height()); 
    quickWidget->resize(QApplication::desktop()->width(), QApplication::desktop()->height()); 
} 

или

QQuickView* quickView = new QQuickView(QUrl("qrc:///QML/qml/MultiPointTouchTest.qml")); 
... // like QQuickWidget's code 

Печать MultiPointTouchArea отличается от информации для последующей последовательности:

  1. положил мой первый палец на сенсорный экран
  2. положил мой второй палец на сенсорный экран; первое касание пальцем становится недействительным, несущественным на данный момент.
  3. удалить второй палец; консоль печатает --- onCanceled ---..., прикосновение первого пальца до сих пор недействительно, а touch1.pressed - false.

Использование QQuickView этого странного поведения не происходит.

В документе Qt говорится об отмене сигнала: «Этот сигнал испускается, когда новые события касания отменены, потому что другой элемент украл обработку событий касания».

Я не знаю, что означает документ после поиска.

Я стараюсь читать исходный код, чтобы понять, что происходит, когда я сенсорный экран, но я люблю QQuickWidget :: событие() отправить сенсорное событие (TouchBegin ...) в QQuickWindow и QQuickView :: событие = QQuickWindow , не переопределили.

Итак, что представляет собой реальное значение для документа Qt?

Мне нужно QQuickWidget не QQuickView, так как я могу использовать MultiPointTouchArea с QQuickWidget и иметь правильное ожидаемое поведение?

+1

В чем вопрос? – folibis

+0

извините :) Я хочу сделать работу MultiPointTouchArea в QQuickWidget как QQuickView, как я уже сказал, поскольку моя проблема, движение первого пальца - это недействительность, когда мой второй палец удаляется с экрана. но QQuickWidget не работает как QQuickView (QQuickView работает отлично. – Player

ответ

1

У меня был подобный вопрос и обнаружил, что установка

quickWidget->setAttribute(Qt::WA_AcceptTouchEvents) 

разрешил его.

Смежные вопросы