2016-03-30 6 views
0

QTクイックUIフォームの例では、宣言的なUIと必須のJavaScriptを区別する方法について説明しています。QTクイックUIフォーム:QMLコンポーネントからカスタム信号を公開し、JavaScriptで処理する方法

しかし、宣言レベルで公開され(宣言されて)、javascriptファイルで処理されるカスタム信号を作成する方法については説明していません。

私たちが呼び出している火災のカスタム信号を呼び出す必要があるシェルアプリケーションに、フォームがロードされます: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

'Button {onClicked:mycomp.init(); } '、いいえ? – folibis

+0

問題は、このinitシグナルが公開されておらず、私はinit関数が存在しないという表示を得ることです。また、QTデザイナのチョークを引き起こすような宣言的なコードではありませんか? – JeffV

答えて

0

参照の順序が間違っていました。

はする必要があります ローダ=> MyComponent.qml(ジャバスクリプト)=> MyComponentForm.ui.qml

しかしだった: ローダ=> 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(); 
    } 
} 
関連する問題