Добавить динамически QML-страницу в SwipeView QML - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно динамически добавлять страницы в Swipeview.Итак, мой код:

    SwipeView {
        id: viewSwipe
        width: parent.width
        height: parent.height * 0.70
        currentIndex: 0
        Component.onCompleted: {
            curIndexWitouthZero = viewSwipe.currentIndex
            curIndexWitouthZero += 1
            addPage(RecipesPhase)
        }

        onCurrentIndexChanged: {
            curIndexWitouthZero = viewSwipe.currentIndex
            curIndexWitouthZero += 1
        }

        Item {
            id: firstPage
            RecipesPhase{}
        }
    }

    PageIndicator {
        id: indicator
        interactive: true
        count: viewSwipe.count
        currentIndex: viewSwipe.currentIndex

        anchors.top: viewSwipe.bottom
        anchors.topMargin: parent.height * 0.05
        anchors.horizontalCenter: parent.horizontalCenter
    }

У меня есть кнопка, которая при нажатии на событие должна добавлять страницы как элемент.Мой код:

  MouseArea{
     anchors.fill: parent
     onClicked: {
         console.log("Cliccato additem")
         //viewSwipe.addItem(RecipesPhase)
         viewSwipe.addPage(RecipesPhase)
     }
  }

Но ничего не произошло.Итак, я пробовал также:

     SwipeView {
        id: viewSwipe
        width: parent.width
        height: parent.height * 0.70
        currentIndex: 0
        Component.onCompleted: {
            curIndexWitouthZero = viewSwipe.currentIndex
            curIndexWitouthZero += 1
            addPage(RecipesPhase)
        }

        onCurrentIndexChanged: {
            curIndexWitouthZero = viewSwipe.currentIndex
            curIndexWitouthZero += 1
        }

        function addPage(page) {
            console.log("funzione addPage()")
           addItem(page)
           page.visible = true
        }
    }

, а затем позвонить:

viewSwipe.addPage(MyPageQML)

, но ничего не произошло.Итак, вопрос в том, где я не прав?Спасибо за решения.

1 Ответ

0 голосов
/ 20 ноября 2018

RecipesPhase - это компонент, а не Item, компонент аналогичен классу и Item для объекта, поэтому идея состоит в том, чтобы создать элемент динамически.Например, я буду считать, что RecipesPhase является следующим компонентом:

RecipesPhase.qml

import QtQuick 2.0

Rectangle {
    width: 100
    height: 100
    color: "red"
}

Затем каждый раз, когда вы нажимаете мышью, вы создаете RecipesPhaseслучайный цвет:

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.4

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Example")
    property int curIndexWitouthZero: 0

    SwipeView {
        id: viewSwipe
        width: parent.width
        height: parent.height * 0.70
        currentIndex: 0
        Component.onCompleted: {
            curIndexWitouthZero = viewSwipe.currentIndex
            curIndexWitouthZero += 1
            addPage(createPage())
        }

        onCurrentIndexChanged: {
            curIndexWitouthZero = viewSwipe.currentIndex
            curIndexWitouthZero += 1
        }

        function addPage(page) {
            console.log("funzione addPage()")
            addItem(page)
            page.visible = true
        }
        function createPage(){
            var component = Qt.createComponent("RecipesPhase.qml");
            var page = component.createObject(viewSwipe,
                                              {"color": Qt.rgba(Math.random(), Math.random(), Math.random(), Math.random())}
                                              );
            return page
        }
    }
    PageIndicator {
        id: indicator
        interactive: true
        count: viewSwipe.count
        currentIndex: viewSwipe.currentIndex
        onCurrentIndexChanged: viewSwipe.currentIndex = currentIndex

        anchors.top: viewSwipe.bottom
        anchors.topMargin: parent.height * 0.05
        anchors.horizontalCenter: parent.horizontalCenter
    }
    MouseArea{
        anchors.top: indicator.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        onClicked: viewSwipe.addPage(viewSwipe.createPage())
    }
}
...