2015-04-05 68 views
0

我試圖讓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的打印是不同的信息,用於按照順序操作:

  1. 把我的第一根手指觸摸屏
  2. 把我的第二根手指觸摸屏;第一次手指觸摸變得無效,現在不重要。
  3. 刪除我的第二根手指;控制檯打印--- onCanceled ---...,第一根手指觸摸仍然無效,touch1.pressed爲false。

使用QQuickView這種奇怪的行爲不會發生。

Qt的文件說取消的信號,「當新的觸摸事件已被取消,因爲另一個項目偷走觸摸事件處理時發出此信號。」

搜索後我不知道文檔的意思。我嘗試閱讀源代碼,以瞭解當我觸摸屏幕時發生了什麼,但我喜歡QQuickWidget :: event()發送觸摸事件(TouchBegin ...)到QQuickWindow,並且QQuickView :: event = QQuickWindow ,沒有重新實現。

那麼,Qt文檔的真正含義是什麼?

我需要QQuickWidget而不是QQuickView,那麼我怎樣才能用QQuickWidget使用MultiPointTouchArea並且具有正確的預期行爲?

+1

你的問題是什麼? – folibis 2015-04-05 09:24:16

+0

抱歉:)我想讓QQuickWidget像QQuickView一樣工作,就像我說的那樣,作爲我的問題,當我的第二根手指從屏幕上移開時,第一根手指的移動是無效的。但QQuickWidget不起作用QQuickView(QQuickView工作完美。 – Player 2015-04-05 09:35:17

回答

1

我也有類似的問題,並發現設置

quickWidget->setAttribute(Qt::WA_AcceptTouchEvents) 

解決它。