在SwipeView QML上动态添加QML页面

时间:2018-11-20 13:37:09

标签: qt qml qt5 swipeview

我需要在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 :(得分:1)

RecipesPhase是一个组件,而不是一个Item,一个组件类似于一个类,一个Item类似于一个对象,因此其思想是动态创建该项目。例如,我将认为RecipesPhase是以下组件:

RecipesPhase.qml

-static -lc++abi -pthread -fuse-ld=lld

然后每次您按下鼠标区域都会创建一种随机颜色的RecipesPhase:

import QtQuick 2.0

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