Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. after creation dynamic component they don't see
Forum Updated to NodeBB v4.3 + New Features

after creation dynamic component they don't see

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
13 Posts 3 Posters 1.5k Views 1 Watching
  • 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.
  • elicatE elicat

    I have creare a function in javascript (see down) for create dynamic component ( start from here : http://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html )
    The qml is a sample rectangle :

    import QtQuick 2.0
    
    Rectangle { width: 80; height: 50; color: "red" }
    

    Why I don' see the object rectangle ???

    The function

    var componentQmlFile;
    var objComponentCreate;
    
    function createComponentObjects(typeComponentQmlFile, idAreaPosition, jsonObjectComponent) {
        componentQmlFile = Qt.createComponent(typeComponentQmlFile);
        if (componentQmlFile.status == Component.Ready) {
            finishCreation(idAreaPosition, jsonObjectComponent );
        } else {
            componentQmlFile.statusChanged.connect(finishCreation);
        }
    }
    
    function finishCreation(idAreaPosition, jsonObjectComponent) {
        if (componentQmlFile.status == Component.Ready) {
            objComponentCreate = componentQmlFile.createObject(idAreaPosition, {"x": 20, "y": 20});
            if (objComponentCreate == null) {
                // Error Handling
                console.log("Error creating object");
            } else {
                var propertyComponent = "";
                for (var key in jsonObjectComponent){
                    var value = jsonObjectComponent[key];
                    objComponentCreate[key] = value;
                }
                console.log("fine applicazione proprieta");
            }
        } else if (componentQmlFile.status == Component.Error) {
            // Error Handling
            console.log("Error loading component:", componentQmlFile.errorString());
        }
    }
    
    DiracsbracketD Offline
    DiracsbracketD Offline
    Diracsbracket
    wrote on last edited by Diracsbracket
    #4

    @elicat

    So, you create a component componentQmlFile which in turn you use to create an object objComponentCreate, which apparently is some visual item, since it has x and y properties, and which I assume represent the Rectangles you expect to see.

    But then you do something like:

    objComponentCreate[key] = value;
    

    which essentially redefines objComponentCreate as an array. Furthermore, if the (hash) key is a string, then even this array definition will produce incorrect results, since JavaScript does not support named indices in arrays (although no error/warning will be produced ?)
    https://www.w3schools.com/js/js_arrays.asp

    In any case, the object objComponentCreate you created is replaced by an array with a some values given by value and is no longer a visual Item.

    elicatE 1 Reply Last reply
    0
    • L Leon_2001

      It would be helpful to see a little bit more of your code.

      Where is your Window? Where is your call of the function createComponentObjects?

      Because probably the mistake is not in the functions as they are from the docs, but instead in your way how to call them ...

      elicatE Offline
      elicatE Offline
      elicat
      wrote on last edited by
      #5

      @Leon_2001 said in after creation dynamic component they don't see:

      It would be helpful to see a little bit more of your code.
      ok this is complet file QML where i Want insert component

      import QtQuick 2.9
      import QtQuick.Window 2.2
      import QtQuick.Controls 1.4
      import QtQuick.Layouts 1.3
      import QtQuick.Dialogs 1.2
      import "./js/allproject.js" as GeneralJs
      import "./js/main.js" as MainJs
      import "./js/componentCreation.js" as MyComponentCreationJs
      import "./mycomponent"
      import FileIO 1.0
      
      //usage:
      
      
      ApplicationWindow {
          id: window
          visible: true
          width: 1024
          height: 768
          title: qsTr("template base spira")
      
          menuBar: MenuBar {
              Menu {
                  title: "File"
                  MenuItem { text: "Open..." }
                  MenuItem { text: "Close" }
              }
      
              Menu {
                  title: "Edit"
                  MenuItem { text: "Cut" }
                  MenuItem { text: "Copy" }
                  MenuItem { text: "Paste" }
                  MenuSeparator { }
                  MenuItem { text: "Delete" }
              }
          }
          toolBar: ToolBar {
                  RowLayout {
                      ToolButton {
                          iconSource: "images/ic_find_replace_black_24dp.png"
                      }
                      ToolButton {
                          iconSource: "images/ic_print_black_24dp.png"
                      }
                      ToolButton {
                          iconSource: "images/ic_settings_black_24dp.png"
                      }
                      Item { Layout.fillWidth: true }
                      CheckBox {
                          text: "Enabled"
                          checked: true
                      }
                  }
              }
          Rectangle {
              id: idRectTopBottom
              x: 0
              y: 0
              width: 1024
              height: 80
              color: "#ffffff"
              FileIO {
                  id: myFileLanguageComponent
                  source: ":/json/languageComponent.json"
                  onError: console.log(msg)
              }
              Component.onCompleted: {
                  var jsonObject ="";
                  jsonObject = JSON.parse(myFileLanguageComponent.read());
                 
      
                  var propertyComponent = "";
                  for (var key in jsonObject.main.IT.BtnTop01){
                      var value = jsonObject.main.IT.BtnTop01[key];
                      if (propertyComponent != "" ){propertyComponent = propertyComponent + ", "};
                      propertyComponent = propertyComponent + "\"" + key + "\": " + value;
                  }
                  MyComponentCreationJs.createComponentObjects("../mycomponent/ButtonReal.qml", "idRectTopBottom", jsonObject.main.IT.BtnTop01 );
      
              }
          }
      
          Rectangle {
              id: idRectArea
              color: "#ffffff"
              anchors.bottom: parent.bottom
              anchors.bottomMargin: 60
              anchors.right: parent.right
              anchors.rightMargin: 0
              anchors.left: parent.left
              anchors.leftMargin: 0
              anchors.top: idRectTopBottom.bottom
              anchors.topMargin: 0
      
              SplitView {
                  id: splitView
                  anchors.fill: parent
      
                  Rectangle {
                      id: idRectAreaSx
                      width: 300
                      color: "#ffffff"
                      anchors.left: parent.left
                      anchors.leftMargin: 0
                      anchors.top: parent.top
                      anchors.topMargin: 0
                      anchors.bottom: parent.bottom
                      anchors.bottomMargin: 0
      
                      TreeView {
                          id: treeViewSystem
                          anchors.fill: parent
                          TableViewColumn {
                                 title: "Name"
                                 role: "fileName"
                                 width: 300
                             }
                             TableViewColumn {
                                 title: "Permissions"
                                 role: "filePermissions"
                                 width: 100
                             }
                             //model: model
                      }
                  }
      
                  Rectangle {
                      id: idRecAreaDx
                      color: "#ffffff"
                      anchors.top: parent.top
                      anchors.topMargin: 0
                      anchors.bottom: parent.bottom
                      anchors.bottomMargin: 0
                      anchors.left: idRectAreaSx.right
                      anchors.leftMargin: 0
                      anchors.right: parent.right
                      anchors.rightMargin: 0
                  }
              }
          }
      
          Rectangle {
              id: idRectMessage
              height: 200
              color: "#ffffff"
              anchors.right: parent.right
              anchors.rightMargin: 0
              anchors.left: parent.left
              anchors.leftMargin: 0
              anchors.top: idRectArea.bottom
              anchors.topMargin: 0
          }
      
          statusBar: StatusBar {
              RowLayout {
                  anchors.fill: parent
                  Label { text: "Read Only" }
              }
          }
      }
      
      My scope is populate the rectangle  **idRectTopBottom** whith the button component end modify your property (for example text and size) reading from a file json

      Saluti, Gianfranco Elicat

      1 Reply Last reply
      0
      • DiracsbracketD Diracsbracket

        @elicat

        So, you create a component componentQmlFile which in turn you use to create an object objComponentCreate, which apparently is some visual item, since it has x and y properties, and which I assume represent the Rectangles you expect to see.

        But then you do something like:

        objComponentCreate[key] = value;
        

        which essentially redefines objComponentCreate as an array. Furthermore, if the (hash) key is a string, then even this array definition will produce incorrect results, since JavaScript does not support named indices in arrays (although no error/warning will be produced ?)
        https://www.w3schools.com/js/js_arrays.asp

        In any case, the object objComponentCreate you created is replaced by an array with a some values given by value and is no longer a visual Item.

        elicatE Offline
        elicatE Offline
        elicat
        wrote on last edited by
        #6

        @Diracsbracket
        I understand what you say diracsbracket.
        When I execute this command

        objComponentCreate[key] = value;
        

        I was trying to dynamically modify the properties of the newly created component by reading the data I set in a json file like this:

        {
            "main": {
                "IT": {
                  "BtnTop01": {
                    "width": 100,
                    "height": 28
                  },
                  "BtnTop02": {
                    "width": 100,
                    "height": 28
                    }
                }, 
                "EN":{
                  "BtnTop01": {
                    "text": "START"
                  },
                  "BtnTop02": {
                    "text": "DELETE"
                  }
                  
                }
            }
            
          }
        

        then, for example

        objComponentCreate[key] = value;
        

        in place of

        objComponentCreate.width= 100;
        

        Not having reported any kind of error I thought this was possible.

        If I have the wrong method how can I dynamically change the properties of an object by reading from a list?

        In any case, even without this condition, once the object is created, I do not see it.
        Tomorrow I try another very simple project.

        Saluti, Gianfranco Elicat

        DiracsbracketD 1 Reply Last reply
        0
        • elicatE elicat

          @Diracsbracket
          I understand what you say diracsbracket.
          When I execute this command

          objComponentCreate[key] = value;
          

          I was trying to dynamically modify the properties of the newly created component by reading the data I set in a json file like this:

          {
              "main": {
                  "IT": {
                    "BtnTop01": {
                      "width": 100,
                      "height": 28
                    },
                    "BtnTop02": {
                      "width": 100,
                      "height": 28
                      }
                  }, 
                  "EN":{
                    "BtnTop01": {
                      "text": "START"
                    },
                    "BtnTop02": {
                      "text": "DELETE"
                    }
                    
                  }
              }
              
            }
          

          then, for example

          objComponentCreate[key] = value;
          

          in place of

          objComponentCreate.width= 100;
          

          Not having reported any kind of error I thought this was possible.

          If I have the wrong method how can I dynamically change the properties of an object by reading from a list?

          In any case, even without this condition, once the object is created, I do not see it.
          Tomorrow I try another very simple project.

          DiracsbracketD Offline
          DiracsbracketD Offline
          Diracsbracket
          wrote on last edited by Diracsbracket
          #7

          @elicat
          Assuming that your JSON parsing works and that you use it to extract properties such as x, y, width, height, text for each of your objComponentCreate objects (which are apparently some Button-derived items), you must do something like:

          objComponentCreate.x = xValueFromJson
          objComponentCreate.y = yValueFromJson
          objComponentCreate.width = widthValueFromJson
          objComponentCreate.height = heightValueFromJson
          objComponentCreate.text = textStringFromJson
          

          Since you are looping your JSON key/value pairs, you must therefore do something like:

          if (key = "x")
             objComponentCreate.x = value
          else if (key = "y")
             objComponentCreate.y = value
          ...
          
          

          or use a switch/case statement.

          Better still is to have temp variables

          var xValueFromJson
          var  yValueFromJson
          var widthValueFromJson
          var  heightValueFromJson
          var  textStringFromJson
          

          and set those to your JSON parsed values as shown above, and then use those variables directly in the object construction

          objComponentCreate = componentQmlFile.createObject(idAreaPosition, {"x": xValueFromJson, "y": yValueFromJson, "width": widthValueFromJson, etc...});
          

          Also, make sure those objects have the correct visual item as parent.

          1 Reply Last reply
          0
          • elicatE Offline
            elicatE Offline
            elicat
            wrote on last edited by
            #8

            Good morning Diracsbracket,
            I was thinking of creating a more dynamic process. In this way I have to set all the elseif for each property if I do not want to put my hand to the code afterwards. But this is the least evil.

            I followed your advice and changed the properties setting.
            Following the new part of the work (for those who read: when we have solved the post, I publish all the code).

            function finishCreation(idAreaPosition, jsonObjectComponent) {
                if (componentQmlFile.status == Component.Ready) {
                    objComponentCreate = componentQmlFile.createObject(idAreaPosition, {"x": 5, "y": 38, color: "green"});
                    if (objComponentCreate == null) {
                        // Error Handling
                        console.log("Error creating object");
                    } else {
                        console.log("oggetto creato");
                        var textPropery = "";
                        var withPropery = "";
                        var heightPropery = "";
                        var propertyComponent = "";
                        for (var key in jsonObjectComponent){
                            var value = jsonObjectComponent[key];
                            if (key == "text") {
                               objComponentCreate.text = value;
                                console.log("assegno a " + idAreaPosition + " la property text: " + " con valore: " + value);
                            } else if (key == "width"){
                               objComponentCreate.width = value;
                               console.log("assegno a " + idAreaPosition + " la property width: " + " con valore: " + value);
                            } else if (key == "height"){
                               objComponentCreate.height = value
                               console.log("assegno a " + idAreaPosition + " la property height: " + " con valore: " + value);
                            }
                            /*
                            if (propertyComponent != "" ){propertyComponent = propertyComponent + ", "};
                            propertyComponent = propertyComponent + "\"" + key + "\": " + value;
                            */
                        }
                        console.log("fine applicazione proprita");
                    }
                } else if (componentQmlFile.status == Component.Error) {
                    // Error Handling
                    console.log("Error loading component:", componentQmlFile.errorString());
                }
            }
            

            But although all the steps are executed without error:

            QML debugging is enabled. Only use this in a safe environment.
            qml: The rectangles  completed
            qml: dentro createComponentObjects
            qml: dentro status ready
            qml: oggetto creato
            qml: assegno a idRectTopBottom la property text:  con valore: AVVIA
            qml: assegno a idRectTopBottom la property width:  con valore: 100
            qml: assegno a idRectTopBottom la property height:  con valore: 28
            qml: fine applicazione proprieta
            

            The object is not displayed. What is missing?
            0_1532588892118_dynamic_button.png

            below the component file ButtonReal.qml

            Button {
                id: buttonRealBlack
                width: 120
                height: 26
                text: qsTr("DEFAULT")
                antialiasing: false
                //iconSource: "./images/ic_alarm_on_white_18dp.png"
                activeFocusOnPress: false
                tooltip: "digita il comando per confermare"
                style: ButtonStyle {
                    background: Rectangle {
                        id: rectangleButtonRealBlack
                        anchors.fill: parent
                        color: "#000000"
                        gradient: Gradient {
                            GradientStop { position: 0 ; color: buttonRealBlack.pressed ? "#404040" : "#A0A0A0" }
                            GradientStop { position: 1 ; color: buttonRealBlack.pressed ? "#000000" : "#404040" }
                        }
                    }
                    label: Component {
                            Text {
                                text: buttonRealBlack.text
                                //font: fontSize
                                color: "#FFFFFF"
                                wrapMode: Text.WordWrap
                                verticalAlignment: Text.AlignVCenter
                                horizontalAlignment: Text.AlignHCenter
                                anchors.fill: parent
                            }
                        }
                }
             }
            

            Saluti, Gianfranco Elicat

            DiracsbracketD 1 Reply Last reply
            0
            • elicatE elicat

              Good morning Diracsbracket,
              I was thinking of creating a more dynamic process. In this way I have to set all the elseif for each property if I do not want to put my hand to the code afterwards. But this is the least evil.

              I followed your advice and changed the properties setting.
              Following the new part of the work (for those who read: when we have solved the post, I publish all the code).

              function finishCreation(idAreaPosition, jsonObjectComponent) {
                  if (componentQmlFile.status == Component.Ready) {
                      objComponentCreate = componentQmlFile.createObject(idAreaPosition, {"x": 5, "y": 38, color: "green"});
                      if (objComponentCreate == null) {
                          // Error Handling
                          console.log("Error creating object");
                      } else {
                          console.log("oggetto creato");
                          var textPropery = "";
                          var withPropery = "";
                          var heightPropery = "";
                          var propertyComponent = "";
                          for (var key in jsonObjectComponent){
                              var value = jsonObjectComponent[key];
                              if (key == "text") {
                                 objComponentCreate.text = value;
                                  console.log("assegno a " + idAreaPosition + " la property text: " + " con valore: " + value);
                              } else if (key == "width"){
                                 objComponentCreate.width = value;
                                 console.log("assegno a " + idAreaPosition + " la property width: " + " con valore: " + value);
                              } else if (key == "height"){
                                 objComponentCreate.height = value
                                 console.log("assegno a " + idAreaPosition + " la property height: " + " con valore: " + value);
                              }
                              /*
                              if (propertyComponent != "" ){propertyComponent = propertyComponent + ", "};
                              propertyComponent = propertyComponent + "\"" + key + "\": " + value;
                              */
                          }
                          console.log("fine applicazione proprita");
                      }
                  } else if (componentQmlFile.status == Component.Error) {
                      // Error Handling
                      console.log("Error loading component:", componentQmlFile.errorString());
                  }
              }
              

              But although all the steps are executed without error:

              QML debugging is enabled. Only use this in a safe environment.
              qml: The rectangles  completed
              qml: dentro createComponentObjects
              qml: dentro status ready
              qml: oggetto creato
              qml: assegno a idRectTopBottom la property text:  con valore: AVVIA
              qml: assegno a idRectTopBottom la property width:  con valore: 100
              qml: assegno a idRectTopBottom la property height:  con valore: 28
              qml: fine applicazione proprieta
              

              The object is not displayed. What is missing?
              0_1532588892118_dynamic_button.png

              below the component file ButtonReal.qml

              Button {
                  id: buttonRealBlack
                  width: 120
                  height: 26
                  text: qsTr("DEFAULT")
                  antialiasing: false
                  //iconSource: "./images/ic_alarm_on_white_18dp.png"
                  activeFocusOnPress: false
                  tooltip: "digita il comando per confermare"
                  style: ButtonStyle {
                      background: Rectangle {
                          id: rectangleButtonRealBlack
                          anchors.fill: parent
                          color: "#000000"
                          gradient: Gradient {
                              GradientStop { position: 0 ; color: buttonRealBlack.pressed ? "#404040" : "#A0A0A0" }
                              GradientStop { position: 1 ; color: buttonRealBlack.pressed ? "#000000" : "#404040" }
                          }
                      }
                      label: Component {
                              Text {
                                  text: buttonRealBlack.text
                                  //font: fontSize
                                  color: "#FFFFFF"
                                  wrapMode: Text.WordWrap
                                  verticalAlignment: Text.AlignVCenter
                                  horizontalAlignment: Text.AlignHCenter
                                  anchors.fill: parent
                              }
                          }
                  }
               }
              
              DiracsbracketD Offline
              DiracsbracketD Offline
              Diracsbracket
              wrote on last edited by Diracsbracket
              #9

              @elicat said in after creation dynamic component they don't see:

              idAreaPosition

              What is that? It does not seem to be a valid visual Item: it seems to be merely a string, since when you print it:

              console.log("assegno a " + idAreaPosition + " la property height: " + " con valore: " + value);
              

              It gives:

              qml: assegno a idRectTopBottom la property height:  con valore: 28
              

              Whenever you print an object in QML using console.log or console.debug, you get an output like this (rect is a Rectangle in this example):

              console.debug("This is a " + rect)
              

              This gives:

              qml: This is a QQuickRectangle(0x19f7edd77d0)
              

              So you must see the type + the address of the object. That's not what your idAreaPosition is. I wager there is a mixup in the way you create your Rectangle and that you stringified its id. How do you define/create idAreaPosition?

              1 Reply Last reply
              1
              • elicatE Offline
                elicatE Offline
                elicat
                wrote on last edited by
                #10

                @elicat said in after creation dynamic component they don't see:

                function finishCreation(idAreaPosition, jsonObjectComponent) {

                Hello,
                idAreaPosition is a parameter. I pass it when i call
                function MyComponentCreationJs.createComponentObjects

                Rectangle {
                        id: idRectTopBottom
                        x: 0
                        y: 0
                        width: 1024
                        height: 80
                        color: "#ffffff"
                
                        FileIO {
                            id: myFileLanguageComponent
                            source: ":/json/languageComponent.json"
                            onError: console.log(msg)
                        }
                
                        Component.onCompleted: {
                            console.log("The rectangle's  completed");
                            var jsonObject ="";
                            jsonObject = JSON.parse(myFileLanguageComponent.read());
                            MyComponentCreationJs.createComponentObjects("../mycomponent/ButtonReal.qml", "idRectTopBottom", jsonObject.main.IT.BtnTop01 );
                
                        }
                

                This is response with also objet created:

                qml: oggetto creato: Button_QMLTYPE_56(0x3d4f8130)
                qml: assegno a idRectTopBottom la property text:  con valore: AVVIA
                qml: assegno a idRectTopBottom la property width:  con valore: 100
                qml: assegno a idRectTopBottom la property height:  con valore: 28
                qml: fine applicazione proprieta
                

                The line assegno etc etc: it are value readed from json for Key main.IT.BtnTop01

                {
                    "main": {
                        "IT": {
                          "BtnTop01": {
                            "text": "AVVIA",
                            "width": 100,
                            "height": 28
                          },
                . . . .
                  }
                
                

                Saluti, Gianfranco Elicat

                DiracsbracketD 1 Reply Last reply
                0
                • elicatE elicat

                  @elicat said in after creation dynamic component they don't see:

                  function finishCreation(idAreaPosition, jsonObjectComponent) {

                  Hello,
                  idAreaPosition is a parameter. I pass it when i call
                  function MyComponentCreationJs.createComponentObjects

                  Rectangle {
                          id: idRectTopBottom
                          x: 0
                          y: 0
                          width: 1024
                          height: 80
                          color: "#ffffff"
                  
                          FileIO {
                              id: myFileLanguageComponent
                              source: ":/json/languageComponent.json"
                              onError: console.log(msg)
                          }
                  
                          Component.onCompleted: {
                              console.log("The rectangle's  completed");
                              var jsonObject ="";
                              jsonObject = JSON.parse(myFileLanguageComponent.read());
                              MyComponentCreationJs.createComponentObjects("../mycomponent/ButtonReal.qml", "idRectTopBottom", jsonObject.main.IT.BtnTop01 );
                  
                          }
                  

                  This is response with also objet created:

                  qml: oggetto creato: Button_QMLTYPE_56(0x3d4f8130)
                  qml: assegno a idRectTopBottom la property text:  con valore: AVVIA
                  qml: assegno a idRectTopBottom la property width:  con valore: 100
                  qml: assegno a idRectTopBottom la property height:  con valore: 28
                  qml: fine applicazione proprieta
                  

                  The line assegno etc etc: it are value readed from json for Key main.IT.BtnTop01

                  {
                      "main": {
                          "IT": {
                            "BtnTop01": {
                              "text": "AVVIA",
                              "width": 100,
                              "height": 28
                            },
                  . . . .
                    }
                  
                  
                  DiracsbracketD Offline
                  DiracsbracketD Offline
                  Diracsbracket
                  wrote on last edited by Diracsbracket
                  #11

                  @elicat
                  You cannot use idAreaPosition as a parent for the visual objects you create, since you know it is NOT an object, but just "a parameter" as you say.

                  You must use an actual visual object as parent! You cannot not use:
                  objComponentCreate = componentQmlFile.createObject(idAreaPosition, ...)

                  Replace idAreaPosition in the above line by an actual visual OBJECT in your layout, such as an instance of Rectangle, Item, Row, etc... and NOT by idAreaPosition which just seems to be a STRING that equals idRectTopBottom in your case.

                  Good luck.

                  1 Reply Last reply
                  1
                  • elicatE Offline
                    elicatE Offline
                    elicat
                    wrote on last edited by elicat
                    #12

                    pity that you can not say bad words in the forum ... I changed and passed as a parameter "this" in place of the id name of the object and everything worked.

                    MyComponentCreationJs.createComponentObjects("../mycomponent/ButtonReal.qml", this , jsonObject.main.IT.BtnTop01 );
                    

                    I do not close the post just to take the time to publish in the repository this paret dle design that sees the creation of dynamic objects, taking advantage of property values from a json.

                    Thanks to everyone and mainly to the patience of Diracsbracket.

                    Remember that I'm a newbie and I do not even know English very well :-)

                    Saluti, Gianfranco Elicat

                    DiracsbracketD 1 Reply Last reply
                    0
                    • elicatE elicat

                      pity that you can not say bad words in the forum ... I changed and passed as a parameter "this" in place of the id name of the object and everything worked.

                      MyComponentCreationJs.createComponentObjects("../mycomponent/ButtonReal.qml", this , jsonObject.main.IT.BtnTop01 );
                      

                      I do not close the post just to take the time to publish in the repository this paret dle design that sees the creation of dynamic objects, taking advantage of property values from a json.

                      Thanks to everyone and mainly to the patience of Diracsbracket.

                      Remember that I'm a newbie and I do not even know English very well :-)

                      DiracsbracketD Offline
                      DiracsbracketD Offline
                      Diracsbracket
                      wrote on last edited by Diracsbracket
                      #13

                      @elicat said in after creation dynamic component they don't see:

                      I changed and passed as a parameter "this" in place of the id name of the object and everything worked.

                      Glad you found it!
                      Know however that in QML, an object's id is equivalent to a pointer/reference to that object, i.e. is equivalent to the this pointer.

                      If you have declared the idRectTopBottom like this:

                      Rectangle {
                           id: idRectTopBottom
                      }
                      

                      Then you can use

                      MyComponentCreationJs.createComponentObjects("../mycomponent/ButtonReal.qml", idRectTopBottom,...)
                      

                      Your mistake was that you put the id between "" quotes, i.e. making it a string.

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved