QML:一个信号,多个插槽,可能吗?

时间:2013-10-25 07:35:45

标签: qt qml qtquick2

我试图找出QML对象发送信号的最佳方式,以及许多其他QML元素对其做出响应。通常,如果您创建signal mySignal,那么您将自动为您创建一个名为onMySignal的处理程序,但该处理程序仅存在于创建信号的同一元素中。

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

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

1 个答案:

答案 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);
  }
}