死QML元素接收信号?

时间:2012-01-13 10:25:09

标签: qt qml

我的代码类似于以下内容:

...
id: myComponent
signal updateState()
property variant modelList: []
Repeater {
    model: modelList
    MyButton {
        ...
        Connection {
            target: myComponent
            onUpdateState: {
                ...
            }
        }
    }
}

我为modelList分配一个值,然后发出myComponent.updateState()来更新转发器中的MyButton组件。在这一点上,我收到很多关于不存在的属性的警告

似乎信号传递给不再存在的MyButton(因为当我更改modelList时转发器将重新运行)。

有没有办法避免这种情况,还是应该忽略警告?

1 个答案:

答案 0 :(得分:3)

在销毁连接到C ++信号的QML组件时遇到了类似的问题。通过在组件被销毁时添加用于断开信号的处理程序来解决该问题。在动态生成的组件中,您可以尝试手动连接信号,以便在销毁时手动断开它们。在我的例子中,代码看起来像这样:

MyComponent {
    Component.onCompleted: signal.connect(callback_function)
    Component.onDestruction: signal.disconnect(callback_function)

    function callback_function() {
        // process signal
    }
}

可能是,有一个更好的解决方案,不需要手动连接和断开信号,但这对我有用。如果向console.log("Destroying...")处理程序添加onDestruction,则可以检查组件是否正在断开信号,从而实际销毁。