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. Error: Qt.createQmlObject(): failed to create object: Non-existent attached object

Error: Qt.createQmlObject(): failed to create object: Non-existent attached object

Scheduled Pinned Locked Moved Solved QML and Qt Quick
createobjectgridlayoutjavascriptcreateqmlobject
13 Posts 4 Posters 2.9k Views
  • 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.
  • sierdzioS sierdzio

    The only attached object is Layout so it's probably the reason to fail: QML engine does not see the GridLayout when creating your object.

    Rather than fixing this, though, I'd recommend using a completely different approach:

    • use Repeater in your GridLayout to create the items you need
    • pass the model you have to Reapeater so that it updates automatically (there will be no more any need for Connections component)
    • do not create components in QML dynamically

    This should greatly simplify the logic.

    K Offline
    K Offline
    Kyeiv
    wrote on last edited by Kyeiv
    #3

    @sierdzio said in Error: Qt.createQmlObject(): failed to create object: Non-existent attached object:

    • use Repeater in your GridLayout to create the items you need

    But Repeater supports only one Component as delegate. I want it to fill 2 columns of GridLayout with 2 Text delegates.

    Static grid that i am trying to make dynamic:

    GridLayout {
                                id: grid
                                columns: 2
    
                                Text { 
                                    text: "first text:"; 
                                    color: "white"; 
                                    horizontalAlignment: Text.AlignRight
                                    Layout.alignment: Qt.AlignRight
                                    }
                                Text { text: "text"; color: "white"}
                                Text { 
                                    text: "second text:"; 
                                    color: "white"; 
                                    horizontalAlignment: Text.AlignRight
                                    Layout.alignment: Qt.AlignRight
                                    }
                                Text { text: "text text"; color: "white"}
                                Text { 
                                    text: "the third text:"; 
                                    color: "white"; 
                                    horizontalAlignment: Text.AlignRight
                                    Layout.alignment: Qt.AlignRight
                                    }
                                Text { text: "text text text"; color: "white"}
                            }
    

    Its output:

                            first text: text
                           second text: text text
                        the third text: text text text
    
    jeremy_kJ 1 Reply Last reply
    0
    • K Kyeiv

      @sierdzio said in Error: Qt.createQmlObject(): failed to create object: Non-existent attached object:

      • use Repeater in your GridLayout to create the items you need

      But Repeater supports only one Component as delegate. I want it to fill 2 columns of GridLayout with 2 Text delegates.

      Static grid that i am trying to make dynamic:

      GridLayout {
                                  id: grid
                                  columns: 2
      
                                  Text { 
                                      text: "first text:"; 
                                      color: "white"; 
                                      horizontalAlignment: Text.AlignRight
                                      Layout.alignment: Qt.AlignRight
                                      }
                                  Text { text: "text"; color: "white"}
                                  Text { 
                                      text: "second text:"; 
                                      color: "white"; 
                                      horizontalAlignment: Text.AlignRight
                                      Layout.alignment: Qt.AlignRight
                                      }
                                  Text { text: "text text"; color: "white"}
                                  Text { 
                                      text: "the third text:"; 
                                      color: "white"; 
                                      horizontalAlignment: Text.AlignRight
                                      Layout.alignment: Qt.AlignRight
                                      }
                                  Text { text: "text text text"; color: "white"}
                              }
      

      Its output:

                              first text: text
                             second text: text text
                          the third text: text text text
      
      jeremy_kJ Offline
      jeremy_kJ Offline
      jeremy_k
      wrote on last edited by
      #4

      @Kyeiv said in Error: Qt.createQmlObject(): failed to create object: Non-existent attached object:

      @sierdzio said in Error: Qt.createQmlObject(): failed to create object: Non-existent attached object:

      • use Repeater in your GridLayout to create the items you need

      But Repeater supports only one Component as delegate. I want it to fill 2 columns of GridLayout with 2 Text delegates.

      Wrap the 2 delegates in a single component and use the index property to decide which to use for each cell.

      Asking a question about code? http://eel.is/iso-c++/testcase/

      K 1 Reply Last reply
      0
      • jeremy_kJ jeremy_k

        @Kyeiv said in Error: Qt.createQmlObject(): failed to create object: Non-existent attached object:

        @sierdzio said in Error: Qt.createQmlObject(): failed to create object: Non-existent attached object:

        • use Repeater in your GridLayout to create the items you need

        But Repeater supports only one Component as delegate. I want it to fill 2 columns of GridLayout with 2 Text delegates.

        Wrap the 2 delegates in a single component and use the index property to decide which to use for each cell.

        K Offline
        K Offline
        Kyeiv
        wrote on last edited by
        #5

        @jeremy_k I am not sure how to achieve it, can you provide some sample code?

        1 Reply Last reply
        0
        • jeremy_kJ Offline
          jeremy_kJ Offline
          jeremy_k
          wrote on last edited by
          #6
          GridLayout {
              columns: 2
              Repeater {
                  model: 10
                  delegate: Text {
                          text: index % 2 == 0 ? "text " + index : "text" * index
                  }
              }
          }
          

          For more complicated or external delegates, substitute DelegateChooser or Loader for the Text item.

          Asking a question about code? http://eel.is/iso-c++/testcase/

          K 1 Reply Last reply
          0
          • jeremy_kJ jeremy_k
            GridLayout {
                columns: 2
                Repeater {
                    model: 10
                    delegate: Text {
                            text: index % 2 == 0 ? "text " + index : "text" * index
                    }
                }
            }
            

            For more complicated or external delegates, substitute DelegateChooser or Loader for the Text item.

            K Offline
            K Offline
            Kyeiv
            wrote on last edited by
            #7

            @jeremy_k But my model is in format of QVariantMap, for example:

            "key" : { "label": "first text"; "value": "text" }
            "key2" : { "label": "second text"; "value": "text text" }
            

            so i cannot see how to take advantage of indexes in here.

            jeremy_kJ 1 Reply Last reply
            0
            • K Kyeiv

              @jeremy_k But my model is in format of QVariantMap, for example:

              "key" : { "label": "first text"; "value": "text" }
              "key2" : { "label": "second text"; "value": "text text" }
              

              so i cannot see how to take advantage of indexes in here.

              jeremy_kJ Offline
              jeremy_kJ Offline
              jeremy_k
              wrote on last edited by jeremy_k
              #8

              @Kyeiv Use a model.

              Edit: QVariantMap might be directly usable as a model for a repeater as well. If so, index is available, as is modelData.

              Asking a question about code? http://eel.is/iso-c++/testcase/

              K 1 Reply Last reply
              0
              • jeremy_kJ jeremy_k

                @Kyeiv Use a model.

                Edit: QVariantMap might be directly usable as a model for a repeater as well. If so, index is available, as is modelData.

                K Offline
                K Offline
                Kyeiv
                wrote on last edited by Kyeiv
                #9

                @jeremy_k yes but still if so, i cannot take advantage of the index property when i use one object, let's say of index 1 to fill 2 Texts

                i need something like:

                GridLayout {
                    columns: 2
                    Repeater {
                        model: model.map
                        delegate: Text {
                                text: modelData.label
                                horizontalAlignment: Text.AlignRight
                                Layout.alignment: Qt.AlignRight
                        }
                       Text {
                                text: modelData.value
                        }
                    }
                }
                
                jeremy_kJ fcarneyF 2 Replies Last reply
                0
                • K Kyeiv

                  @jeremy_k yes but still if so, i cannot take advantage of the index property when i use one object, let's say of index 1 to fill 2 Texts

                  i need something like:

                  GridLayout {
                      columns: 2
                      Repeater {
                          model: model.map
                          delegate: Text {
                                  text: modelData.label
                                  horizontalAlignment: Text.AlignRight
                                  Layout.alignment: Qt.AlignRight
                          }
                         Text {
                                  text: modelData.value
                          }
                      }
                  }
                  
                  jeremy_kJ Offline
                  jeremy_kJ Offline
                  jeremy_k
                  wrote on last edited by
                  #10

                  @Kyeiv You might be better off starting from a sketch or a description the use case. It looks like this is implementing the hard way, perhaps porting from a toolkit with a different structure.

                  Asking a question about code? http://eel.is/iso-c++/testcase/

                  K 1 Reply Last reply
                  0
                  • jeremy_kJ jeremy_k

                    @Kyeiv You might be better off starting from a sketch or a description the use case. It looks like this is implementing the hard way, perhaps porting from a toolkit with a different structure.

                    K Offline
                    K Offline
                    Kyeiv
                    wrote on last edited by
                    #11

                    @jeremy_k
                    what i have: a map of objects which have 2 attributes - label and value.
                    what i want to achieve: the formatted list of them in form of:

                                            first label text: value text
                                           second label text: value text
                                        the third label text: its value text
                    
                    

                    so its centered, the " : " in the middle.

                    1 Reply Last reply
                    0
                    • K Kyeiv

                      @jeremy_k yes but still if so, i cannot take advantage of the index property when i use one object, let's say of index 1 to fill 2 Texts

                      i need something like:

                      GridLayout {
                          columns: 2
                          Repeater {
                              model: model.map
                              delegate: Text {
                                      text: modelData.label
                                      horizontalAlignment: Text.AlignRight
                                      Layout.alignment: Qt.AlignRight
                              }
                             Text {
                                      text: modelData.value
                              }
                          }
                      }
                      
                      fcarneyF Offline
                      fcarneyF Offline
                      fcarney
                      wrote on last edited by
                      #12

                      @Kyeiv said in Error: Qt.createQmlObject(): failed to create object: Non-existent attached object:

                      GridLayout {
                      columns: 2
                      Repeater {
                      model: model.map
                      delegate: Text {
                      text: modelData.label
                      horizontalAlignment: Text.AlignRight
                      Layout.alignment: Qt.AlignRight
                      }
                      Text {
                      text: modelData.value
                      }
                      }
                      }

                      Then just put them in one delegate item:

                      GridLayout {
                          columns: 2
                          Repeater {
                              model: model.map
                              delegate: Column {
                              Text {
                                      text: modelData.label
                                      horizontalAlignment: Text.AlignRight
                                      Layout.alignment: Qt.AlignRight
                              }
                             Text {
                                      text: modelData.value
                              }
                              }
                          }
                      }
                      

                      C++ is a perfectly valid school of magic.

                      1 Reply Last reply
                      0
                      • jeremy_kJ Offline
                        jeremy_kJ Offline
                        jeremy_k
                        wrote on last edited by
                        #13

                        A ListView appears to be a better match than the more complicated GridLayout and Repeater.

                        ListView {
                            delegate: Item {
                                width: ListView.view.width
                                height: childrenRect.height
                                Text {
                                    anchors.right: parent.horizontalCenter
                                    text: modelData.firstPart + ":"
                                }
                                Text {
                                    anchors.left: parent.horizontalCenter
                                    text: modelData.secondPart
                                }
                            }
                        }
                        

                        Asking a question about code? http://eel.is/iso-c++/testcase/

                        1 Reply Last reply
                        1

                        • Login

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