2017-09-26 24 views
1

私はうまくいけば何かここで明らかに欠けているわけではありません。QtクイックQML MouseAreaオートリピートオンプレス

私はアプリを書いていて、ImageMouseAreaのズームインボタンを作っています。マウスボタンを押したままで、1秒間隔でメソッドコールを繰り返してズームインするには、ボタンが必要です。これを繰り返す方法は完全には明らかではありません。小さな遅延で期待通りが、私はまた、

基本的に同じことを
onPressAndHold: { cameraController.zoomIn(0.5); } 

で試してみました

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); } 
    } 

、私はマウスがしばらく毎秒このアクションを繰り返す必要があります。今、私は持っていますボタンが押されます。

答えて

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

関連する問題