2013-10-25 51 views
3

我想找出一个QML对象发出信号和许多其他QML元素响应它的最佳方式。通常情况下,如果您创建signal mySignal,那么您将为您自动创建一个名为onMySignal的处理程序,但该处理程序仅存在于创建该信号的相同元素中。QML:一个信号,多个插槽,可能吗?

一个特别不雅的解决方案可能是在发生信号时存储要更新的QML元素数组,然后在处理程序中循环遍历所有这些元素并执行所需的操作。

如果没有简单的方法,我会感到惊讶。我错过了QML中信号插槽机制的明显用例吗?

+0

应该有一种创建自定义连接的方法 –

回答

4

您可以使用Connections组件在QML实现这一

Item与信号我们要赶上:

MyItem { 
    id: itemWithSignal 

    onMySignal: { 
    console.log("I am sending my signal"); 
    } 
} 

在另一个Item我们使用Connections组件:

MyOtherItem { 
    id: itemSomewhereElse 

    Connections { 
    target: itemWithSignal 

    onMySignal: { 
     console.log("itemWithSignal just emitted its signal!"); 
    } 
    } 
} 

您还可以在QML中使用connect(),所以它可能是某些ng像这样:

MyOtherItem { 
    id: itemSomewhereElse 

    onMyOtherSignal: { 
    console.log("My signal is connected!"); 
    } 

    Component.onCompleted: { 
    itemWithSignal.mySignal.connect(itemSomewhereElse.myOtherSignal); 
    } 
}