2017-09-26 41 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