2017-09-26 135 views
1

希望我不會錯過這裏明顯的東西。Qt快速QML MouseArea自動重複按

我正在寫一個應用程序,並已與ImageMouseArea放大按鈕。我需要這個按鈕來重複一個方法調用,比如說,每秒按住鼠標鍵放大。如何重複這一點並不完全清楚。現在,我有:

Rectangle { 
    id:zoomInBtn 
    Image { 
     id: zoomInImg 
     anchors.centerIn: parent 
     fillMode: Image.PreserveAspectFit 
     source: zoomIn.pressed ? ":/img/zoom_in_sel" : ":/img/zoom_in_unsel" 
    } 
    MouseArea { 
     id: zoomIn 
     anchors.fill: parent 
     onPressed: { cameraController.zoomIn(0.5); } 
    } 

我也試圖與

onPressAndHold: { cameraController.zoomIn(0.5); } 

這確實基本上是相同的,儘管有小的延遲符合市場預期,但我需要重複這個動作每秒,而鼠標按鈕被保持。

回答

2

要執行您需要的任務,您必須使用Timer。當containsMouse處於活動狀態時,定時器必須保持活動狀態。如果定時器被激活,您還必須啓用triggeredOnStart立即運行。

Rectangle { 
    id:zoomInBtn 
    Image { 
     id: zoomInImg 
     anchors.centerIn: parent 
     fillMode: Image.PreserveAspectFit 
     source: zoomIn.pressed ? ":/img/zoom_in_sel" : ":/img/zoom_in_unsel" 
    } 
    MouseArea { 
     id: zoomIn 
     anchors.fill: parent 
    } 

    Timer { 
     id: timer 
     interval: 1000 
     repeat: true 
     triggeredOnStart: true 
     running: zoomIn.containsMouse 
     onTriggered: cameraController.zoomIn(0.5) //task 
     } 
    } 
} 
+1

您應該啓動計時器以避免初始延遲。 – dtech

+0

@dtech感謝您通知我詳細信息,一個優雅的方式來執行您提交的內容是激活triggeredOnStart屬性。 :P – eyllanesc

+1

另外,除非每行有多個語句,否則QML中的';'是多餘的 – dtech