【问题标题】:QML: one signal, multiple slots, possible?QML:一个信号,多个时隙,可能吗?
【发布时间】:2013-10-25 07:35:45
【问题描述】:

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

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

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

【问题讨论】:

  • 应该有创建自定义连接的方法

标签: qt qml qtquick2


【解决方案1】:

您可以在 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);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多