Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Arrays and structures in QML
Forum Updated to NodeBB v4.3 + New Features

Arrays and structures in QML

Scheduled Pinned Locked Moved Unsolved General and Desktop
arraystructurearray of struct
15 Posts 3 Posters 31.6k 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.
  • p3c0P p3c0

    @Alper Ok. But what do you intend to store in array of structures ?

    AlperA Offline
    AlperA Offline
    Alper
    wrote on last edited by Alper
    #6

    @p3c0
    The width of container rectangle divides into width of component (number of columns : C) and height of container divides into height of container(number of rows: R).
    So i get a table width C columns and R rows, each Row covers y coordinate from y1 to y2 and each Column from x1 to x2.
    When a component dragged, its x,y coordinate will be checked to position in suitable place.

    for (i = 0 ; i<elementsOfTable;i++)
    if(component.x in array[i].x and component.y in array[i].y)
    {
    setComponentPosition in position i (position i x,y coordinates is in table)
    }

    i don't want do that in C++.
    Another thing i need is a scroll bar in thish manner. i don't know how to add it in this manner. because the Flickable and Grid will be removed.

    p3c0P 1 Reply Last reply
    0
    • AlperA Alper

      @p3c0
      The width of container rectangle divides into width of component (number of columns : C) and height of container divides into height of container(number of rows: R).
      So i get a table width C columns and R rows, each Row covers y coordinate from y1 to y2 and each Column from x1 to x2.
      When a component dragged, its x,y coordinate will be checked to position in suitable place.

      for (i = 0 ; i<elementsOfTable;i++)
      if(component.x in array[i].x and component.y in array[i].y)
      {
      setComponentPosition in position i (position i x,y coordinates is in table)
      }

      i don't want do that in C++.
      Another thing i need is a scroll bar in thish manner. i don't know how to add it in this manner. because the Flickable and Grid will be removed.

      p3c0P Offline
      p3c0P Offline
      p3c0
      Moderators
      wrote on last edited by
      #7

      @Alper Perhaps an array of point's ?

      Another thing i need is a scroll bar in thish manner. i don't know how to add it in this manner. because the Flickable and Grid will be removed.

      What type is the container then ?

      157

      AlperA 1 Reply Last reply
      0
      • p3c0P p3c0

        @Alper Perhaps an array of point's ?

        Another thing i need is a scroll bar in thish manner. i don't know how to add it in this manner. because the Flickable and Grid will be removed.

        What type is the container then ?

        AlperA Offline
        AlperA Offline
        Alper
        wrote on last edited by Alper
        #8

        @p3c0 rectange

        an array of ranges of points.

        p3c0P 2 Replies Last reply
        0
        • AlperA Alper

          @p3c0 rectange

          an array of ranges of points.

          p3c0P Offline
          p3c0P Offline
          p3c0
          Moderators
          wrote on last edited by
          #9

          @Alper Well how do you intend to scroll a rectangle ? Why not Flickable then ?

          157

          AlperA 1 Reply Last reply
          0
          • AlperA Alper

            @p3c0 rectange

            an array of ranges of points.

            p3c0P Offline
            p3c0P Offline
            p3c0
            Moderators
            wrote on last edited by
            #10

            @Alper Array of points

            var arr = [
                        Qt.point(0,30),
                        Qt.point(40,32),
                        Qt.point(4,3),
                        Qt.point(5,6)
                    ];
            

            157

            1 Reply Last reply
            1
            • p3c0P p3c0

              @Alper Well how do you intend to scroll a rectangle ? Why not Flickable then ?

              AlperA Offline
              AlperA Offline
              Alper
              wrote on last edited by Alper
              #11

              @p3c0 said:

              intend

              :) i intend to use every thing that does it!
              But i don't know HOW!
              I tried it but not worked:

                  function createComponent(){ //the app calls this function several times when running
                      {
                          yCoord += 100;    //i used it to check scrolling
                          var component = Qt.createComponent("qrc:/MyQML.qml");
                          var obj  = component.createObject(flickableContainer, {"x": 0, "y": yCoord });
                      }
                  }
              
              
              
                  Flickable {
                      id:flickableContainer
                      anchors.fill: parent // parent is a rectangle
                      anchors.margins: 5
                  }
                  ScrollView {
                      contentItem :flickableContainer
                      width: parent.width
                      height: parent.height
                      x:flickableContainer.x
                      y:flickableContainer.y
                  }
              
              p3c0P 1 Reply Last reply
              0
              • AlperA Alper

                @p3c0 said:

                intend

                :) i intend to use every thing that does it!
                But i don't know HOW!
                I tried it but not worked:

                    function createComponent(){ //the app calls this function several times when running
                        {
                            yCoord += 100;    //i used it to check scrolling
                            var component = Qt.createComponent("qrc:/MyQML.qml");
                            var obj  = component.createObject(flickableContainer, {"x": 0, "y": yCoord });
                        }
                    }
                
                
                
                    Flickable {
                        id:flickableContainer
                        anchors.fill: parent // parent is a rectangle
                        anchors.margins: 5
                    }
                    ScrollView {
                        contentItem :flickableContainer
                        width: parent.width
                        height: parent.height
                        x:flickableContainer.x
                        y:flickableContainer.y
                    }
                
                p3c0P Offline
                p3c0P Offline
                p3c0
                Moderators
                wrote on last edited by
                #12

                @Alper
                Flickable should be inside ScrollView.
                For eg:

                ScrollView {
                    width: 200; height: 200
                    Flickable {
                        anchors.fill: parent
                        contentWidth: image.width; contentHeight: image.height
                        Image { id: image; source: "http://placehold.it/650x650&text=\"Qt\"" }
                    }
                }
                

                And set ScrollView as a parent to dynamic component.
                Btw. You can completely replace Flickable with ScrollView.

                157

                AlperA 1 Reply Last reply
                1
                • p3c0P p3c0

                  @Alper
                  Flickable should be inside ScrollView.
                  For eg:

                  ScrollView {
                      width: 200; height: 200
                      Flickable {
                          anchors.fill: parent
                          contentWidth: image.width; contentHeight: image.height
                          Image { id: image; source: "http://placehold.it/650x650&text=\"Qt\"" }
                      }
                  }
                  

                  And set ScrollView as a parent to dynamic component.
                  Btw. You can completely replace Flickable with ScrollView.

                  AlperA Offline
                  AlperA Offline
                  Alper
                  wrote on last edited by
                  #13

                  @p3c0 Thanks for your reply
                  It works for image as static object/element, how to use it for dynamic component?

                  p3c0P 2 Replies Last reply
                  0
                  • AlperA Alper

                    @p3c0 Thanks for your reply
                    It works for image as static object/element, how to use it for dynamic component?

                    p3c0P Offline
                    p3c0P Offline
                    p3c0
                    Moderators
                    wrote on last edited by
                    #14

                    @Alper It seems the scrollbars are not enabled when a component is added to it dynamically. Might be a bug or we are missing something? Will find it out.

                    157

                    1 Reply Last reply
                    1
                    • AlperA Alper

                      @p3c0 Thanks for your reply
                      It works for image as static object/element, how to use it for dynamic component?

                      p3c0P Offline
                      p3c0P Offline
                      p3c0
                      Moderators
                      wrote on last edited by
                      #15

                      Hi @Alper,
                      Here is what works.
                      Use ScrollView instead of Flickable for scrollbars. Then as per this we need to explicitly set the contentItem as this newly created component.
                      A very minimal example:

                      import QtQuick 2.6
                      import QtQuick.Controls 1.4
                      
                      Item {
                          id: root
                          width: 200
                          height: 200
                      
                          ScrollView {
                              id: scroll
                              anchors.fill: parent
                          }
                      
                          Button {
                              text: "Load"
                              onClicked: {
                                  var component = Qt.createComponent("Dummy.qml");
                                  var obj  = component.createObject(scroll);
                                  scroll.contentItem = obj
                              }
                          }
                      }
                      
                      //Dummy.qml
                      
                      import QtQuick 2.6
                      
                      Image {
                          id: image;
                          source: "http://placehold.it/650x650&text=\"Qt\""
                      }
                      

                      157

                      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