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