【问题标题】:Dead QML elements receiving signals?死 QML 元素接收信号?
【发布时间】:2012-01-13 10:25:08
【问题描述】:

我有类似下面的代码:

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

我为 modelList 赋值,然后发出 myComponent.updateState() 来更新中继器中的 MyButton 组件。此时我收到很多关于不存在属性的警告

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

有没有办法避免这种情况,或者我应该直接忽略警告?

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    在销毁连接到 C++ 信号的 QML 组件时,我遇到了类似的问题。该问题通过添加一个处理程序来解决,该处理程序用于在组件被销毁时断开信号。在动态生成的组件中,您可以尝试手动连接信号,以便在销毁时手动断开它们。就我而言,代码如下所示:

    MyComponent {
        Component.onCompleted: signal.connect(callback_function)
        Component.onDestruction: signal.disconnect(callback_function)
    
        function callback_function() {
            // process signal
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多