Component.onCompleted内でのシグナル送信はできない?



  • Loaderにソースとして設定したオブジェクトが初期化され呼び出されたときに呼び出された
    Component.onCompleted内でシグナル送信を行いConnectionsで受け取ろうとしたところうまく受信できませんでした。
    何が問題なのでしょうか 教えてください!!

    main.qml
    @import QtQuick 2.0

    Rectangle {
    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.0

    Rectangle {
    signal message

    color: "black"
    width: 100
    height: 62
    
    Component.onCompleted: {
        message()
    }
    

    }
    @



  • 挙動からの推測ですが、どうも処理の順番が MVの生成 → Component.onCompleted → Loader.item への代入
    と進んでいるようです。
    そのため、Component.onCompleted は実行されていますが、Loader からシグナルを受け取ることが出来ないようです。
    対策として Timer を使用したり、onParentChanged で対応できないかも試してみましたが、うまくいきませんでした。
    MV 側からのアプローチで Component.onCompleted のタイミングでシグナルを Loader 経由で受け取るスマート方法は見つけられませんでした。

    設計的には美しくありませんが、Loader の onItemChanged や onStatusChanged, onLoaded を使う事になりそうです。

    バグ報告もなさそうなのでバグかどうかは不明ですが、処理を考慮するとQt側を修正するのも難しいかもしれません。



  • リプライありがとうございます。

    そうですか... 次はべつのアプローチで攻めてみようと思います。


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.