Я пытаюсь заставить 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 отличается от информации для последующей последовательности:
- положил мой первый палец на сенсорный экран
- положил мой второй палец на сенсорный экран; первое касание пальцем становится недействительным, несущественным на данный момент.
- удалить второй палец; консоль печатает --- onCanceled ---..., прикосновение первого пальца до сих пор недействительно, а touch1.pressed - false.
Использование QQuickView этого странного поведения не происходит.
В документе Qt говорится об отмене сигнала: «Этот сигнал испускается, когда новые события касания отменены, потому что другой элемент украл обработку событий касания».
Я не знаю, что означает документ после поиска.
Я стараюсь читать исходный код, чтобы понять, что происходит, когда я сенсорный экран, но я люблю QQuickWidget :: событие() отправить сенсорное событие (TouchBegin ...) в QQuickWindow и QQuickView :: событие = QQuickWindow , не переопределили.
Итак, что представляет собой реальное значение для документа Qt?
Мне нужно QQuickWidget не QQuickView, так как я могу использовать MultiPointTouchArea с QQuickWidget и иметь правильное ожидаемое поведение?
В чем вопрос? – folibis
извините :) Я хочу сделать работу MultiPointTouchArea в QQuickWidget как QQuickView, как я уже сказал, поскольку моя проблема, движение первого пальца - это недействительность, когда мой второй палец удаляется с экрана. но QQuickWidget не работает как QQuickView (QQuickView работает отлично. – Player