我试图让MultiPointTouchArea在QQuickWidget中正常工作。请看下面的例子QML文件(MultiPointTouchTest.qml):QQuickWidget中的MultiPointTouchArea行为
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 :: event()发送触摸事件(TouchBegin ...)到QQuickWindow,并且QQuickView :: event = QQuickWindow ,没有重新实现。
那么,Qt文档的真正含义是什么?
我需要QQuickWidget而不是QQuickView,那么我怎样才能用QQuickWidget使用MultiPointTouchArea并且具有正确的预期行为?
你的问题是什么? – folibis 2015-04-05 09:24:16
抱歉:)我想让QQuickWidget像QQuickView一样工作,就像我说的那样,作为我的问题,当我的第二根手指从屏幕上移开时,第一根手指的移动是无效的。但QQuickWidget不起作用QQuickView(QQuickView工作完美。 – Player 2015-04-05 09:35:17