Qt快速QML鼠标earea在压力机上自动复位

Qt快速QML鼠标earea在压力机上自动复位,qt,qml,qtquick2,Qt,Qml,Qtquick2,希望我没有错过一些明显的东西 我正在编写一个应用程序,并制作了一个带有图像和鼠标earea的放大按钮。我需要在按住鼠标按钮的同时,每隔一秒钟按一次按钮来重复方法调用。如何让这种情况重演还不完全清楚。现在我有: Rectangle { id:zoomInBtn Image { id: zoomInImg anchors.centerIn: parent fillMode: Image.PreserveAspectFit

希望我没有错过一些明显的东西

我正在编写一个应用程序,并制作了一个带有
图像
鼠标earea
的放大按钮。我需要在按住鼠标按钮的同时,每隔一秒钟按一次按钮来重复方法调用。如何让这种情况重演还不完全清楚。现在我有:

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

这基本上是一样的,虽然有预期的小延迟,但我需要在按住鼠标按钮的同时每秒重复此操作。

要执行您需要的任务,必须使用。计时器在激活时必须保持激活状态。如果计时器被激活,您还必须启用立即运行

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

您应该在启动时触发计时器,以避免初始延迟,除非每行有多个语句,否则是多余的。最后,我将通过设置计时器
运行:zoomIn.containsPress
来保存几行代码,这样就不需要按下和释放处理程序;)如果信号处理程序只包含一个表达式,那么它们就不需要一个
{}
块。将此类重复任务作为独立函数而不是在处理程序中实现通常是有益的,只需通过一个线性函数调用函数即可。此外,如果使用命名函数,则可以连接和断开连接,这非常有用,因为与重新绑定时替换的属性绑定不同,信号处理程序堆叠在一起,因此删除以前的或“继承的”处理程序的唯一方法是将其作为命名函数,以便可以断开连接。这对于匿名表达式显然是不可能的。