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. Change property of Dynamic Item in grid
Forum Updated to NodeBB v4.3 + New Features

Change property of Dynamic Item in grid

Scheduled Pinned Locked Moved Solved QML and Qt Quick
14 Posts 3 Posters 1.4k 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.
  • E Offline
    E Offline
    echo55
    wrote on last edited by
    #1

    Hi,

    I'm trying to change the color of the border of my Item which are in a grid but created dynamically so if i understood well . they don't have an id so i can't access them.

    I have a mousearea on each item and when i click on it i change the color . but if you click on another one you must change all the others Item in this grid to "transparent" again.
    How can i do that ? i don't have an id .
    And the mousearea is in the Item where i can't access others Item color.

    DiracsbracketD 1 Reply Last reply
    0
    • E echo55

      Hi,

      I'm trying to change the color of the border of my Item which are in a grid but created dynamically so if i understood well . they don't have an id so i can't access them.

      I have a mousearea on each item and when i click on it i change the color . but if you click on another one you must change all the others Item in this grid to "transparent" again.
      How can i do that ? i don't have an id .
      And the mousearea is in the Item where i can't access others Item color.

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

      @echo55
      Can you show the code you have so far ?

      1 Reply Last reply
      0
      • E Offline
        E Offline
        echo55
        wrote on last edited by
        #3

        Yes of course

        this is where i create it

                         Grid {
                                    id: grid
                                    anchors.fill: parent
                                    rows: 4
                                    columns: 2
                                    spacing: 50
                                    flow: Grid.LeftToRight
                                    Component.onCompleted: {
                                        var c = Qt.createComponent("Bundle_content.qml")
                                        var i = 0
                                        Constants.users["user"]["bundles"].forEach(
                                                    function (info) {
                                                        var o = c.createObject(grid)
                                                        o.width = 300
                                                        o.height = 300
                                                        o.text = info["title"]
                                                        o.pic = info["image"]
                                                        o.v = info["title"]
                                                        o.index = i
                                                        i = i + 1
                                                    })
                                    }
                                }
        

        and this is the component :

        Item {
            id: i
            width: 300
            height: 300
            property alias pic: image1.source
            property alias text: text1.text
            property int index: 0
            property var v: {
        
            }
        
            Rectangle {
                id: rectangle
                color: "#00000000"
                anchors.fill: parent
        
                Rectangle {
                    id: rectangle1
                    x: 315
                    y: 212
                    width: 247
                    height: 217
                    radius: 0
                    gradient: Gradient {
                        GradientStop {
                            position: 0
                            color: rectangle1.gradcolor1
                        }
        
                        GradientStop {
                            position: 1
                            color: rectangle1.gradcolor2
                        }
                    }
                    border.color: "#00000000"
                    anchors.leftMargin: 27
                    anchors.verticalCenter: parent.verticalCenter
                    anchors.horizontalCenter: parent.horizontalCenter
                    property color gradcolor1: "transparent"
                    property color gradcolor2: "transparent"
                    anchors.left: parent.left
        
                    Rectangle {
                        id: rectangle2
                        color: "#ffffff"
                        anchors.rightMargin: 10
                        anchors.leftMargin: 10
                        anchors.bottomMargin: 10
                        anchors.topMargin: 10
                        anchors.fill: parent
                    }
                    Image {
                        id: image1
                        anchors.rightMargin: 5
                        anchors.leftMargin: 5
                        anchors.bottomMargin: 5
                        anchors.topMargin: 5
                        fillMode: Image.PreserveAspectCrop
                        property bool rounded: true
                        property bool adapt: true
                        anchors.fill: parent
                        layer.enabled: rounded
                    }
                }
        
                Text {
                    id: text1
                    x: 308
                    y: 264
                    width: 145
                    height: 36
                    text: qsTr("Error")
                    font.bold: true
                    anchors.horizontalCenterOffset: 1
                    horizontalAlignment: Text.AlignHCenter
                    font.pixelSize: 25
                    anchors.horizontalCenter: parent.horizontalCenter
                }
        }
        

        so i want to change gradcolor1 and 2 outside of the component (where the grid is ) but i can't access a particulary one .

        1 Reply Last reply
        0
        • dheerendraD Offline
          dheerendraD Offline
          dheerendra
          Qt Champions 2022
          wrote on last edited by
          #4

          Use the children property of item. e.g

          for(var i=0;i<grid.children.length;i++){
                grid.chidren[i].color="blue"
          }
          

          MouseArea not required for every item of grid.

          Dheerendra
          @Community Service
          Certified Qt Specialist
          http://www.pthinks.com

          1 Reply Last reply
          2
          • E Offline
            E Offline
            echo55
            wrote on last edited by
            #5

            Alright great news,

            I want it to be trigger when i click on of the Items, but it needs to access grid which isn't in the same file .
            If i do a function and try to call it in the children it doesn't work (not recognized).

            Here is an easy way to do that ?

            Thank you.

            1 Reply Last reply
            0
            • dheerendraD Offline
              dheerendraD Offline
              dheerendra
              Qt Champions 2022
              wrote on last edited by
              #6

              What do you mean by not in same file ? Can you give me the sample code please ?

              Dheerendra
              @Community Service
              Certified Qt Specialist
              http://www.pthinks.com

              1 Reply Last reply
              1
              • E Offline
                E Offline
                echo55
                wrote on last edited by
                #7

                the two code i sent just up .

                It's from two different files (.qml)
                i use

                Qt.createComponent("Bundle_content.qml")
                

                to create in the current file a component from another file so Bundle_content.qml

                1 Reply Last reply
                0
                • dheerendraD Offline
                  dheerendraD Offline
                  dheerendra
                  Qt Champions 2022
                  wrote on last edited by
                  #8

                  Objects created from Button_Component.qml becomes child of Grid. Why do you want to access the parent grid inside the child objects ? Do you want to change something in grid ?

                  Dheerendra
                  @Community Service
                  Certified Qt Specialist
                  http://www.pthinks.com

                  1 Reply Last reply
                  1
                  • E Offline
                    E Offline
                    echo55
                    wrote on last edited by
                    #9

                    I want to change the variable color gradcolor1 and gradcolor2 from the grid .
                    but only when the mousearea of any of the children of grid is pressed.

                    1 Reply Last reply
                    0
                    • dheerendraD Offline
                      dheerendraD Offline
                      dheerendra
                      Qt Champions 2022
                      wrote on last edited by
                      #10

                      Define the signal in your component. Emit the signal when you click. Catch the signal in main. Not a good idea to access the parent inside the child objects.

                      Dheerendra
                      @Community Service
                      Certified Qt Specialist
                      http://www.pthinks.com

                      1 Reply Last reply
                      2
                      • E Offline
                        E Offline
                        echo55
                        wrote on last edited by
                        #11

                        I tried to do that but the problem is that i want to change color of every component except the one clicked .
                        How can i send a signal saying to change color of all of it minus the one who emitted it .

                        1 Reply Last reply
                        0
                        • dheerendraD Offline
                          dheerendraD Offline
                          dheerendra
                          Qt Champions 2022
                          wrote on last edited by dheerendra
                          #12

                          OK. You can try something similar to the following. It is simple concept to show how you can work with object.

                          ===== main.qml =========
                          import QtQuick 2.11
                          import QtQuick.Window 2.11
                          
                          Window {
                              visible: true
                              width: 440
                              height: 480
                              title: qsTr("Hello World")
                              property var comp:null
                          
                              function changeColor(val){
                                  for(var i=0;i<grid.children.length;i++){
                                      var obj = grid.children[i];
                                      if (obj.val===val){
                                          continue;
                                      }else {
                                          obj.color = "blue"
                                      }
                                  }
                              }
                          
                              Grid {
                                  id : grid
                                  spacing: 5
                                  anchors.fill: parent
                                  Component.onCompleted: {
                                      for (var i=0;i<12;i++){
                                          if (comp==null){
                                              comp = Qt.createComponent("ChildElement.qml");
                                          }
                                          var obj = comp.createObject(grid)
                                          obj.changeEveryBody.connect(changeColor);
                                          obj.val = i;
                                      }
                                  }
                              }
                          }
                          ========= ChildElement.qml ===============
                          import QtQuick 2.0
                          
                          Rectangle {
                              width: 100;height: 100;color: "red"
                              property int val:0
                              signal changeEveryBody(int val);
                              MouseArea{
                                  anchors.fill: parent
                                  onClicked: {
                                      changeEveryBody(val)
                                  }
                              }
                          }
                          

                          Dheerendra
                          @Community Service
                          Certified Qt Specialist
                          http://www.pthinks.com

                          1 Reply Last reply
                          3
                          • E Offline
                            E Offline
                            echo55
                            wrote on last edited by
                            #13

                            Thank you very much.
                            It worked.

                            1 Reply Last reply
                            0
                            • dheerendraD Offline
                              dheerendraD Offline
                              dheerendra
                              Qt Champions 2022
                              wrote on last edited by
                              #14

                              cool. please move the case to solved state

                              Dheerendra
                              @Community Service
                              Certified Qt Specialist
                              http://www.pthinks.com

                              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