QT快速UI表单:如何从QML组件中公开自定义信号并在javascript中处理

时间:2016-03-30 18:38:38

标签: qml qtquick2

QT Quick UI Forms示例描述了如何将声明性UI与命令式javascript分开。

但是,它没有描述如何制作在声明级别公开(声明?)并在javascript文件中处理的自定义信号。

表单将被加载到一个shell应用程序中,该应用程序需要调用我们正在调用的自定义信号:init和shutdown。

看来我应该能够做到这一点::

// MyComponent.ui.qml
Item {
   signal init()
}

// MyComponent.qml  javascript file
MyComponent {
  onInit : {
     // do some initialization
  }
}

// Usage in shell
MyComponent {
   id: mycomp
}

// somewhere
button.clicked: mycomp.init()

1 个答案:

答案 0 :(得分:0)

引用的顺序不正确。

需要: Loader => MyComponent.qml(javascript)=> MyComponentForm.ui.qml

但是: Loader => MyComponentForm.ui.qml

//未引用MyComponent.qml(javascript)

我们的加载程序配置为直接加载声明性qml。通过加载javascript qml文件修复。 (反过来又指MyComponentForm)

这样,我们的javascript init函数就暴露了出来。具有命令性javascript的模块使用javascript函数扩展声明性qml。

// MyComponentForm.ui.qml
Item {
   // property aliases as required by imperative code
   // declarative ui stuff
}

// MyComponent.qml  javascript file
MyComponentForm {
  onInit : {
     // do some initialization
  }
}

Loader {
   anchors.fill: parent
   id: pageLoader
}

Button {
   onClicked {  
      source = "qrc://MyComponent.qml";
      pageLoader.item.init();
   }
}