qmlqtquick2swipeviewqtquickcontrols2

How to implement page turner buttons in QML swipeview


I have to implement pages using QML component like Item (say Item 1, Item 2, Item 3) in SwipeView without using Repeaters and also implement page turners as shown below. The getPreviousPage Rectangle should move the view to turn to previous page similarly for getNextPage Rectangle.

import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.0

Window {
  visible: true
  color:"black"
  width: 400+100
  height: 200

  Rectangle
  {
      id:getPreviousPage
      color:"red"
      x:0
      y:0
      width:50
      height:200
      MouseArea
      {
          anchors.fill:parent
          onClicked:
          {
              //turn to previous page
          }
      }
  }

  Rectangle
  {
      id:getNextPage
      color:"green"
      width:50
      x:450
      y:0
      height:200
      MouseArea
      {
          anchors.fill:parent
          onClicked:
          {
              //turn to next page
          }
      }
  }




  Pane {
      id: pane
      width: 400
      height: 200
      x:50
      y:0

      SwipeView {
          id: view
          currentIndex: 1
          anchors.fill: parent

          Repeater {
              model: 3

              Pane {
                  width: view.width
                  height: view.height

                  Column {
                      spacing: 40
                      width: parent.width

                      Label {
                          width: parent.width
                          wrapMode: Label.Wrap
                          horizontalAlignment: Qt.AlignHCenter
                          text: view.currentIndex
                      }


                  }
              }
          }
      }


  }
    }

Solution

  • import QtQuick 2.6
    import QtQuick.Controls 2.0
    import QtQuick.Window 2.0
    Window {
        visible: true
        width: 200
        height: 400
        title: qsTr("Hello World")
    
        id: page
    
        SwipeView {
            id: swipeView
            anchors.fill: parent
            currentIndex: 0
            Page {
                        Label {
                            text: qsTr("First page")
                            anchors.centerIn: parent
                        }
                    }
            Page {
                        Label {
                            text: qsTr("Second page")
                            anchors.centerIn: parent
                        }
                    }
            Page {
                        Label {
                            text: qsTr("Third page")
                            anchors.centerIn: parent
                        }
                    }
            Page {
                        Label {
                            text: qsTr("Fourth page")
                            anchors.centerIn: parent
                        }
                    }
            Page {
                        Label {
                            text: qsTr("Fifth page")
                            anchors.centerIn: parent
                        }
                    }
        }
    
    
    
        Rectangle
        {
            id:minus
            width:parent.width/2
            height:100
            anchors.left:parent.left
            anchors.bottom:parent.bottom
            color:"red"
            MouseArea
            {
                anchors.fill:parent
                onClicked:{
                    if(swipeView.currentIndex>0)
                        swipeView.currentIndex--
                }
            }
        }
        Rectangle
        {
            id:plus
            width:parent.width/2
            height:100
            anchors.right:parent.right
            anchors.bottom:parent.bottom
            color:"green"
            MouseArea
            {
                anchors.fill:parent
                onClicked:{
                    if(swipeView.currentIndex<4)
                        swipeView.currentIndex++
                }
            }
        }
    
    
    }
    

    You can just use Page Qml types instead of Repeaters. Above given code has sample implementation of Page Turners.