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. How to use Scroll View properly?

How to use Scroll View properly?

Scheduled Pinned Locked Moved Solved QML and Qt Quick
15 Posts 4 Posters 2.6k Views 2 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.
  • S Offline
    S Offline
    Subuday
    wrote on last edited by
    #1

    Hi, I wanna area of my program to scroll. I can't do it, just nothing happened. Text fills the setting page area, scrolling doesn't work.

        SettingPage {
            id: settingPage
            height: parent.height - menuBar.height - frame.height
            width: parent.width - toolBar.width
            anchors {
                top: menuBar.bottom
                left: toolBar.right
            }
        }
    

    Setting Page

    Item  {
        id: settingPage
    
        ScrollView {
            anchors.fill: settingPage
            contentItem: settingPage
            clip: true
        }
    
        Label {
            text: "ABC"
            font.pixelSize: 1000
        }
    }
    
    raven-worxR 1 Reply Last reply
    0
    • S Subuday

      Hi, I wanna area of my program to scroll. I can't do it, just nothing happened. Text fills the setting page area, scrolling doesn't work.

          SettingPage {
              id: settingPage
              height: parent.height - menuBar.height - frame.height
              width: parent.width - toolBar.width
              anchors {
                  top: menuBar.bottom
                  left: toolBar.right
              }
          }
      

      Setting Page

      Item  {
          id: settingPage
      
          ScrollView {
              anchors.fill: settingPage
              contentItem: settingPage
              clip: true
          }
      
          Label {
              text: "ABC"
              font.pixelSize: 1000
          }
      }
      
      raven-worxR Offline
      raven-worxR Offline
      raven-worx
      Moderators
      wrote on last edited by
      #2

      @Subuday said in How to use Scroll View properly?:

      Item {
      id: settingPage

      ScrollView {
          anchors.fill: settingPage
          contentItem: settingPage
          clip: true
      }
      

      the scroll view should scroll it's own parent item?

      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
      If you have a question please use the forum so others can benefit from the solution in the future

      S 1 Reply Last reply
      0
      • raven-worxR raven-worx

        @Subuday said in How to use Scroll View properly?:

        Item {
        id: settingPage

        ScrollView {
            anchors.fill: settingPage
            contentItem: settingPage
            clip: true
        }
        

        the scroll view should scroll it's own parent item?

        S Offline
        S Offline
        Subuday
        wrote on last edited by
        #3

        @raven-worx Yes, I want Setting Page to be scrolled.

        raven-worxR 1 Reply Last reply
        0
        • Shrinidhi UpadhyayaS Offline
          Shrinidhi UpadhyayaS Offline
          Shrinidhi Upadhyaya
          wrote on last edited by
          #4

          Hi @Subuday , please have a look at the sample code:-

           Item  {
                  id: settingPage
          
                  height: 500
                  width: 500
                  anchors.centerIn: parent
          
                  ScrollView {
                      anchors.fill: settingPage
                      //####Remove this
                     //                contentItem: settingPage
                      clip: true
          
                      Label {
                          text: "ABC"
                          font.pixelSize: 1000
                      }
                  }
              }
          

          Shrinidhi Upadhyaya.
          Upvote the answer(s) that helped you to solve the issue.

          S 1 Reply Last reply
          1
          • S Subuday

            @raven-worx Yes, I want Setting Page to be scrolled.

            raven-worxR Offline
            raven-worxR Offline
            raven-worx
            Moderators
            wrote on last edited by
            #5

            @Subuday said in How to use Scroll View properly?:

            Yes, I want Setting Page to be scrolled.

            then the ScrollView can't be a child of the item supposed to be scrolled for obvious reasons.
            I guess you rather want to make the ScrollView your component's root item instead?

            --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
            If you have a question please use the forum so others can benefit from the solution in the future

            S 1 Reply Last reply
            1
            • raven-worxR raven-worx

              @Subuday said in How to use Scroll View properly?:

              Yes, I want Setting Page to be scrolled.

              then the ScrollView can't be a child of the item supposed to be scrolled for obvious reasons.
              I guess you rather want to make the ScrollView your component's root item instead?

              S Offline
              S Offline
              Subuday
              wrote on last edited by
              #6

              @raven-worx I try this code, but it also doesn't work.

                  ScrollView {
              
                      height: parent.height - menuBar.height - frame.height
                      width: parent.width - toolBar.width
                      anchors {
                          top: menuBar.bottom
                          left: toolBar.right
                      }
              
                      SettingPage {
                          id: settingPage
                          height: parent.height
                          width: parent.width
                          anchors.fill: parent
                          visible: false
                      }
                  }
              

              Setting Page

              Item {
                  id: settingPage
              
                      Label {
                          id: label
                          text: "ABC"
                          font.pixelSize: 1000
                      }
              
                      Rectangle {
                          height: 100
                          width: 100
                          anchors.top: label.bottom
                          color: "red"
                      }
              
              }
              
              
              raven-worxR 1 Reply Last reply
              0
              • S Subuday

                @raven-worx I try this code, but it also doesn't work.

                    ScrollView {
                
                        height: parent.height - menuBar.height - frame.height
                        width: parent.width - toolBar.width
                        anchors {
                            top: menuBar.bottom
                            left: toolBar.right
                        }
                
                        SettingPage {
                            id: settingPage
                            height: parent.height
                            width: parent.width
                            anchors.fill: parent
                            visible: false
                        }
                    }
                

                Setting Page

                Item {
                    id: settingPage
                
                        Label {
                            id: label
                            text: "ABC"
                            font.pixelSize: 1000
                        }
                
                        Rectangle {
                            height: 100
                            width: 100
                            anchors.top: label.bottom
                            color: "red"
                        }
                
                }
                
                
                raven-worxR Offline
                raven-worxR Offline
                raven-worx
                Moderators
                wrote on last edited by raven-worx
                #7

                @Subuday

                1. ellaborate on "but it also doesn't work."

                height: parent.height
                width: parent.width
                anchors.fill: parent
                visible: false
                

                you are hiding your item. Also you anchor the scroll item to it's parent (same for width/height), which pretty much eliminates the need for scrolling at all.
                Basically a ScrollView makes only sense when the content is bigger than the ScrollView itself.

                --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                If you have a question please use the forum so others can benefit from the solution in the future

                S 1 Reply Last reply
                1
                • Shrinidhi UpadhyayaS Shrinidhi Upadhyaya

                  Hi @Subuday , please have a look at the sample code:-

                   Item  {
                          id: settingPage
                  
                          height: 500
                          width: 500
                          anchors.centerIn: parent
                  
                          ScrollView {
                              anchors.fill: settingPage
                              //####Remove this
                             //                contentItem: settingPage
                              clip: true
                  
                              Label {
                                  text: "ABC"
                                  font.pixelSize: 1000
                              }
                          }
                      }
                  
                  S Offline
                  S Offline
                  Subuday
                  wrote on last edited by
                  #8

                  @Shrinidhi-Upadhyaya Hi @Shrinidhi Upadhyaya, it works fine, but when I add rectangle in Setting Page, it doesn't.

                  Item {
                      id: settingPage
                  
                      ScrollView {
                          anchors.fill: settingPage
                          clip: true
                  
                          Label {
                              id: label
                              text: "ABC"
                              font.pixelSize: 1000
                          }
                  
                          Rectangle {
                              height: 100
                              width: 100
                              anchors.top: label.bottom
                              color: "red"
                          }
                      }
                  }
                  
                  
                  
                  ODБOïO raven-worxR 2 Replies Last reply
                  0
                  • S Subuday

                    @Shrinidhi-Upadhyaya Hi @Shrinidhi Upadhyaya, it works fine, but when I add rectangle in Setting Page, it doesn't.

                    Item {
                        id: settingPage
                    
                        ScrollView {
                            anchors.fill: settingPage
                            clip: true
                    
                            Label {
                                id: label
                                text: "ABC"
                                font.pixelSize: 1000
                            }
                    
                            Rectangle {
                                height: 100
                                width: 100
                                anchors.top: label.bottom
                                color: "red"
                            }
                        }
                    }
                    
                    
                    
                    ODБOïO Offline
                    ODБOïO Offline
                    ODБOï
                    wrote on last edited by ODБOï
                    #9

                    hi @Subuday
                    @raven-worx suggested to

                    //SettingPage.qml
                    import QtQuick 2.6
                    import QtQuick.Controls 2.3
                    import QtQuick.Layouts 1.3
                    
                    ColumnLayout {
                        RowLayout{
                            Label {
                                text: "ABC"
                                font.pixelSize: 254
                                color:"blue"
                            }
                            Rectangle {
                                height: 100
                                width: 100
                                color: "blue"
                            }
                        }
                    
                        RowLayout{
                            Label {
                                text: "DEF"
                                font.pixelSize: 254
                                color:"green"
                            }
                            Rectangle {
                                height: 100
                                width: 100
                                color: "green"
                            }
                        }
                    }
                    
                    
                    //main.qml
                    Window {
                        visible: true
                        width: 640
                        height: 480
                    
                        ScrollView {
                            width: parent.width/2
                            height: parent.height
                            anchors.right: parent.right
                            clip: true
                           SettingPage{
                                width: 400
                                height: 400
                            }
                        }
                    }
                    
                    
                    1 Reply Last reply
                    1
                    • S Subuday

                      @Shrinidhi-Upadhyaya Hi @Shrinidhi Upadhyaya, it works fine, but when I add rectangle in Setting Page, it doesn't.

                      Item {
                          id: settingPage
                      
                          ScrollView {
                              anchors.fill: settingPage
                              clip: true
                      
                              Label {
                                  id: label
                                  text: "ABC"
                                  font.pixelSize: 1000
                              }
                      
                              Rectangle {
                                  height: 100
                                  width: 100
                                  anchors.top: label.bottom
                                  color: "red"
                              }
                          }
                      }
                      
                      
                      
                      raven-worxR Offline
                      raven-worxR Offline
                      raven-worx
                      Moderators
                      wrote on last edited by
                      #10

                      @Subuday said in How to use Scroll View properly?:

                      ScrollView {
                      anchors.fill: settingPage
                      clip: true

                          Label {
                              id: label
                              text: "ABC"
                              font.pixelSize: 1000
                          }
                      
                          Rectangle {
                              height: 100
                              width: 100
                              anchors.top: label.bottom
                              color: "red"
                          }
                      }
                      

                      sorry, but instead of arbitrarily trying random variations you should first take a look at the docs and the examples.
                      There can only be exactly ONE content item.

                      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                      If you have a question please use the forum so others can benefit from the solution in the future

                      1 Reply Last reply
                      3
                      • raven-worxR raven-worx

                        @Subuday

                        1. ellaborate on "but it also doesn't work."

                        height: parent.height
                        width: parent.width
                        anchors.fill: parent
                        visible: false
                        

                        you are hiding your item. Also you anchor the scroll item to it's parent (same for width/height), which pretty much eliminates the need for scrolling at all.
                        Basically a ScrollView makes only sense when the content is bigger than the ScrollView itself.

                        S Offline
                        S Offline
                        Subuday
                        wrote on last edited by
                        #11

                        @raven-worx I make visible true,

                        Please, check the full code

                        ApplicationWindow {
                            id: mainWindow
                        
                            width: 1000
                            height: 700
                            visible: true
                        
                            Material.theme: Material.Light
                        
                            flags: Qt.FramelessWindowHint
                        
                            property var userID
                        
                            property int previousX
                            property int previousY
                        
                            Connections {
                                target: storage
                            }
                        
                            Item {
                                focus: true
                                Keys.onPressed: {
                                    if (event.key === Qt.Key_Escape) { mainWindow.close(); event.accepted = true}
                                }
                            }
                        
                        
                            MouseArea {
                                anchors.fill: parent
                        
                                onPressed: {
                                    previousX = mouseX
                                    previousY = mouseY
                                }
                        
                                onMouseXChanged: {
                                    var dx = mouseX - previousX
                                    mainWindow.setX(mainWindow.x + dx)
                                }
                        
                                onMouseYChanged: {
                                    var dy = mouseY - previousY
                                    mainWindow.setY(mainWindow.y + dy)
                                }
                            }
                        
                        
                            Rectangle {
                                id: frame
                        
                                height: 24
                                width: mainWindow.width
                        
                                RowLayout {
                                    anchors.top: parent.top
                                    anchors.right: parent.right
                                    anchors.rightMargin: 8
                        
                                    Image {
                                        source: "qrc:/icons/Icons/minimize.png"
                        
                                        MouseArea {
                                            anchors.fill: parent
                        
                                            onClicked: {
                                                mainWindow.showMinimized()
                                            }
                                        }
                                    }
                        
                                    Image {
                                        source: "qrc:/icons/Icons/full.png"
                        
                                        MouseArea {
                                            anchors.fill: parent
                        
                                            onClicked: {
                                                if(mainWindow.visibility == 5) mainWindow.showMaximized()
                                                else mainWindow.showFullScreen()
                                            }
                                        }
                                    }
                        
                                    Image {
                                        source: "qrc:/icons/Icons/close.png"
                                        MouseArea {
                                            anchors.fill: parent
                        
                                            onClicked: mainWindow.close()
                                        }
                                    }
                        
                                }
                            }
                        
                            Rectangle {
                                id: menuBar
                                anchors.top: frame.bottom
                                width: parent.width
                                height: 52
                                color: "#ffffff"
                            }
                        
                            ListView {
                                id: toolBar
                                width: 200
                                height: parent.height
                                anchors.top: menuBar.bottom
                                delegate: ItemDelegate {
                                    width: parent.width
                                    text: model.title
                                    highlighted: ListView.isCurrentItem
                        
                                    MouseArea {
                                        anchors.fill: parent
                                        hoverEnabled: true
                                        cursorShape: Qt.PointingHandCursor
                        
                                        onClicked: {
                                            switch(model.title) {
                                            case "Find Mentors": {
                                                findMentorsPage.visible = true;
                                                settingPage.visible = false;
                                                break;
                                            }
                                            case "Settings": {
                                                settingPage.visible = true;
                                                findMentorsPage.visible = false;
                                                break;
                                            }
                                            }
                                        }
                                    }
                                }
                        
                                model: ListModel {
                                    ListElement { title: "Find Mentors";  source: "qrc:/qml/FindMentorsPage.qml";}
                                    ListElement { title: "My Mentors"; source: "qrc:/pages/CheckBoxPage.qml" }
                                    ListElement { title: "My Projects"; source: "qrc:/qml/MentorPage.qml" }
                                    ListElement { title: "Settings"; source: "qrc:/qml/SettingPage.qml" }
                                }
                            }
                        
                            FindMentorsPage {
                                id: findMentorsPage
                                height: parent.height - menuBar.height - frame.height
                                width: parent.width
                                anchors {
                                    top: menuBar.bottom
                                    left: toolBar.right
                                }
                                visible: true
                            }
                        
                        
                            ScrollView {
                        
                                height: parent.height - menuBar.height - frame.height
                                width: parent.width - toolBar.width
                                anchors {
                                    top: menuBar.bottom
                                    left: toolBar.right
                                }
                        
                                SettingPage {
                                    id: settingPage
                                    height: parent.height
                                    width: parent.width
                                    anchors.fill: parent
                                    visible: false
                                }
                            }
                        }
                        
                        raven-worxR 1 Reply Last reply
                        0
                        • S Subuday

                          @raven-worx I make visible true,

                          Please, check the full code

                          ApplicationWindow {
                              id: mainWindow
                          
                              width: 1000
                              height: 700
                              visible: true
                          
                              Material.theme: Material.Light
                          
                              flags: Qt.FramelessWindowHint
                          
                              property var userID
                          
                              property int previousX
                              property int previousY
                          
                              Connections {
                                  target: storage
                              }
                          
                              Item {
                                  focus: true
                                  Keys.onPressed: {
                                      if (event.key === Qt.Key_Escape) { mainWindow.close(); event.accepted = true}
                                  }
                              }
                          
                          
                              MouseArea {
                                  anchors.fill: parent
                          
                                  onPressed: {
                                      previousX = mouseX
                                      previousY = mouseY
                                  }
                          
                                  onMouseXChanged: {
                                      var dx = mouseX - previousX
                                      mainWindow.setX(mainWindow.x + dx)
                                  }
                          
                                  onMouseYChanged: {
                                      var dy = mouseY - previousY
                                      mainWindow.setY(mainWindow.y + dy)
                                  }
                              }
                          
                          
                              Rectangle {
                                  id: frame
                          
                                  height: 24
                                  width: mainWindow.width
                          
                                  RowLayout {
                                      anchors.top: parent.top
                                      anchors.right: parent.right
                                      anchors.rightMargin: 8
                          
                                      Image {
                                          source: "qrc:/icons/Icons/minimize.png"
                          
                                          MouseArea {
                                              anchors.fill: parent
                          
                                              onClicked: {
                                                  mainWindow.showMinimized()
                                              }
                                          }
                                      }
                          
                                      Image {
                                          source: "qrc:/icons/Icons/full.png"
                          
                                          MouseArea {
                                              anchors.fill: parent
                          
                                              onClicked: {
                                                  if(mainWindow.visibility == 5) mainWindow.showMaximized()
                                                  else mainWindow.showFullScreen()
                                              }
                                          }
                                      }
                          
                                      Image {
                                          source: "qrc:/icons/Icons/close.png"
                                          MouseArea {
                                              anchors.fill: parent
                          
                                              onClicked: mainWindow.close()
                                          }
                                      }
                          
                                  }
                              }
                          
                              Rectangle {
                                  id: menuBar
                                  anchors.top: frame.bottom
                                  width: parent.width
                                  height: 52
                                  color: "#ffffff"
                              }
                          
                              ListView {
                                  id: toolBar
                                  width: 200
                                  height: parent.height
                                  anchors.top: menuBar.bottom
                                  delegate: ItemDelegate {
                                      width: parent.width
                                      text: model.title
                                      highlighted: ListView.isCurrentItem
                          
                                      MouseArea {
                                          anchors.fill: parent
                                          hoverEnabled: true
                                          cursorShape: Qt.PointingHandCursor
                          
                                          onClicked: {
                                              switch(model.title) {
                                              case "Find Mentors": {
                                                  findMentorsPage.visible = true;
                                                  settingPage.visible = false;
                                                  break;
                                              }
                                              case "Settings": {
                                                  settingPage.visible = true;
                                                  findMentorsPage.visible = false;
                                                  break;
                                              }
                                              }
                                          }
                                      }
                                  }
                          
                                  model: ListModel {
                                      ListElement { title: "Find Mentors";  source: "qrc:/qml/FindMentorsPage.qml";}
                                      ListElement { title: "My Mentors"; source: "qrc:/pages/CheckBoxPage.qml" }
                                      ListElement { title: "My Projects"; source: "qrc:/qml/MentorPage.qml" }
                                      ListElement { title: "Settings"; source: "qrc:/qml/SettingPage.qml" }
                                  }
                              }
                          
                              FindMentorsPage {
                                  id: findMentorsPage
                                  height: parent.height - menuBar.height - frame.height
                                  width: parent.width
                                  anchors {
                                      top: menuBar.bottom
                                      left: toolBar.right
                                  }
                                  visible: true
                              }
                          
                          
                              ScrollView {
                          
                                  height: parent.height - menuBar.height - frame.height
                                  width: parent.width - toolBar.width
                                  anchors {
                                      top: menuBar.bottom
                                      left: toolBar.right
                                  }
                          
                                  SettingPage {
                                      id: settingPage
                                      height: parent.height
                                      width: parent.width
                                      anchors.fill: parent
                                      visible: false
                                  }
                              }
                          }
                          
                          raven-worxR Offline
                          raven-worxR Offline
                          raven-worx
                          Moderators
                          wrote on last edited by
                          #12

                          @Subuday
                          you didnt change a single line of the ones i suggested...

                          --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                          If you have a question please use the forum so others can benefit from the solution in the future

                          ODБOïO 1 Reply Last reply
                          3
                          • raven-worxR raven-worx

                            @Subuday
                            you didnt change a single line of the ones i suggested...

                            ODБOïO Offline
                            ODБOïO Offline
                            ODБOï
                            wrote on last edited by ODБOï
                            #13

                            @Subuday .., as said earlier , if your page is same size that your scrollView, nothing will scroll. you have to make the SettingPage bigger than the View + your page still has visible: false

                            S 1 Reply Last reply
                            1
                            • ODБOïO ODБOï

                              @Subuday .., as said earlier , if your page is same size that your scrollView, nothing will scroll. you have to make the SettingPage bigger than the View + your page still has visible: false

                              S Offline
                              S Offline
                              Subuday
                              wrote on last edited by
                              #14

                              @LeLev Can I make Scroll View in Setting Page.
                              I try this, but it doesn't work.

                              Item {
                                  id: settingPage
                              
                                  ScrollView {
                                      height: 100
                                      width: 100
                                      clip: true
                              
                                      Rectangle {
                                          id: test
                                          height: 100
                                          width: 100
                              
                                          Column {
                                              Text {
                                                  text: "ewfewf"
                                                  font.pointSize: 24
                                              }
                              
                                              Text {
                                               text: "ewkmfwef"
                                               font.pointSize: 24
                                              }
                                          }
                              
                                      }
                                  }
                              }
                              
                                  SettingPage {
                                      id: settingPage
                                      height: parent.height - menuBar.height - frame.height
                                      width: parent.width
                                      anchors {
                                          top: menuBar.bottom
                                          left: toolBar.right
                                      }
                                      visible: true
                                  }
                              
                              
                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                Subuday
                                wrote on last edited by
                                #15

                                The suggestion of @LeLev works fine.
                                Thank you for help!

                                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