我试图找出QML对象发送信号的最佳方式,以及许多其他QML元素对其做出响应。通常,如果您创建signal mySignal
,那么您将自动为您创建一个名为onMySignal
的处理程序,但该处理程序仅存在于创建信号的同一元素中。
一个特别不优雅的解决方案可能是存储一个信号发生时你想要更新的QML元素数组,然后在你的处理程序中循环遍历所有这些元素并做你需要的。
如果没有更简单的方法,我会感到惊讶。我错过了QML中信号槽机制的明显用例吗?答案 0 :(得分:5)
您可以在QML中使用Connections组件来实现此目标
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!");
}
}
}
你也可以在connect()
中使用QML
,所以它会是这样的:
MyOtherItem {
id: itemSomewhereElse
onMyOtherSignal: {
console.log("My signal is connected!");
}
Component.onCompleted: {
itemWithSignal.mySignal.connect(itemSomewhereElse.myOtherSignal);
}
}