我試圖讓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