首页 > 解决方案 > QML - 如何将动作附加到信号处理程序?

问题描述

我创建了一个自定义计时器,提供暂停功能和经过时间属性。触发时,elapsedTime按 'interval' 属性量递增。我已经对其进行了测试,并且效果很好。

// CustomTimer.qml
import QtQuick 2.0

Timer {
    property double elapsedTimeSec: 0.0

    interval: 100
    repeat: true

    onTriggered: elapsedTimeSec += interval/1000
}

我将它作为单独的 QML 文件添加到现有项目中。现在我希望将动作附加到我的onTriggered信号处理程序中,以便在我的主应用程序中进行交互和切换。一个小代码例如:

Rectangle {
    Slider { 
        id: slider
        value: 0.2
    }
    CustomTimer {
        onTriggered: slider.value += 0.1    
    }
}

如何在不删除已经存在的内部onTriggered处理程序的情况下做到这一点(因为这些对于计时器进程是必需的)?

标签: qtqmlqt5

解决方案


我怎样才能在不删除已经存在的动作的情况下做到这一点,因为这些对于计时器过程是必要的?

你不应该担心。两个信号处理程序分别同时执行(理论上)。它们共存。因此,在您的代码中,将执行其中的onTriggered处理程序CustomTimer.qml和嵌套在其中的处理程序。Rectangle

您关心的那种覆盖行为只发生在属性中。例如,CustomTimer下面会将计时器的间隔从 100 更改为 500。与插槽不同,该值是传播的。

Rectangle {
    CustomTimer {
        interval: 500
    }
}

推荐阅读