当前位置: 代码迷 >> QT开发 >> 关于两个qml组件其间的信号/槽通信
  详细解决方案

关于两个qml组件其间的信号/槽通信

热度:85   发布时间:2016-04-25 04:11:31.0
关于两个qml组件之间的信号/槽通信
如果使用signal/slot来实现两个qml组件之间的通信,一个组件发信号,另一个组件接收信号,该怎么样实现?

------解决方案--------------------
你可以在主qml里面定义信号与槽的关系,点击的时候发个定义好的信号,其他的qml接收这个信号就可以,具体的内容不好说
------解决方案--------------------
引用:
引用:组件是动态创建的还是静态的?
是动态创建的。在通信方面,和静态创建的区别主要是什么?

静态创建是在QML里完成的,所以可以使用描述性语法,即onXXX的方式去写,而动态创建的则不行,因为动态对象创建只能在JS里完成,它应该使用connect方法去连接。

请看文档QML Signal and Handler Event System里的Connecting Signals to Methods and Signals部分。
------解决方案--------------------
A.qml:

Item{
 id:_a
 width:200
 height:200
 color:"red"
 function showB(){
   var component = Qt.createComponent("B.qml");

        if (component.status == Component.Ready) {
            var bQml = component.createObject(_a);
            bQml.xClicked.connect(doSomething);// 实现两个qml组件之间的通信
        }
 }
 function doSomething(msg){
   console.log(msg+"do something");
 }
 MouseAea{
  anchors.fill parent
  onClicked:showB()
 }
}

----------------

B.qml:

Item{
 id:_b
 width:100
 height:100
 color:"blue"
 signal xClicked(string msg)
 MouseArea{
   anchors.fill:parent
   onClicked:{
    _b.xClicked("test")
    _b.destroy()
   }
 }
}

  相关解决方案