Component.onCompleted内でのシグナル送信はできない?
-
wrote on 29 Aug 2013, 12:41 last edited by
Loaderにソースとして設定したオブジェクトが初期化され呼び出されたときに呼び出された
Component.onCompleted内でシグナル送信を行いConnectionsで受け取ろうとしたところうまく受信できませんでした。
何が問題なのでしょうか 教えてください!!main.qml
@import QtQuick 2.0Rectangle {
width: 360
height: 360
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}Loader{ id: loader source: "MV.qml" } Connections{ target: loader.item onMessage:{ console.log("YEEEEEEEEEEEH") } }
}
@MV.qml
@import QtQuick 2.0Rectangle {
signal messagecolor: "black" width: 100 height: 62 Component.onCompleted: { message() }
}
@ -
wrote on 3 Sept 2013, 13:59 last edited by
挙動からの推測ですが、どうも処理の順番が MVの生成 → Component.onCompleted → Loader.item への代入
と進んでいるようです。
そのため、Component.onCompleted は実行されていますが、Loader からシグナルを受け取ることが出来ないようです。
対策として Timer を使用したり、onParentChanged で対応できないかも試してみましたが、うまくいきませんでした。
MV 側からのアプローチで Component.onCompleted のタイミングでシグナルを Loader 経由で受け取るスマート方法は見つけられませんでした。設計的には美しくありませんが、Loader の onItemChanged や onStatusChanged, onLoaded を使う事になりそうです。
バグ報告もなさそうなのでバグかどうかは不明ですが、処理を考慮するとQt側を修正するのも難しいかもしれません。
-
wrote on 3 Sept 2013, 14:18 last edited by
リプライありがとうございます。
そうですか... 次はべつのアプローチで攻めてみようと思います。
3/3