Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Forum Updated on Feb 6th

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

    Japanese
    2
    3
    3652
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Z
      zokweiron last edited by

      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()
      }
      

      }
      @

      1 Reply Last reply Reply Quote 0
      • T
        takumiasaki last edited by

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

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

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

        1 Reply Last reply Reply Quote 0
        • Z
          zokweiron last edited by

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

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

          1 Reply Last reply Reply Quote 0
          • First post
            Last post