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?
Forum Updated to NodeBB v4.3 + New Features

How to use Scroll View properly?

Scheduled Pinned Locked Moved Solved QML and Qt Quick
15 Posts 4 Posters 2.3k 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 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