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