QML:一个信号,多个槽,是否可行?

4
我正在尝试找出一个QML对象发送信号并让其他许多QML元素响应它的最佳方法。通常,如果您创建了signal mySignal,那么会自动为您创建一个名为onMySignal的处理程序,但该处理程序仅存在于创建信号的同一元素中。
一种特别不优雅的解决方案可能是存储要在发生信号时更新的QML元素数组,然后在处理程序中循环遍历所有这些元素并执行所需操作。
如果没有QML中信号槽机制的明显用例,我会感到惊讶是否有更简单的方法。

应该有一种创建自定义连接的方法。 - ratchet freak
1个回答

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!");
    }
  }
}

您也可以在QML中使用connect(),代码如下:

MyOtherItem {
  id: itemSomewhereElse

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接