Пользовательский переход QML StackView

Я просмотрел документы Qt: Qt StackView, но все же я не могу понять, что я делаю неправильно, потому что мой код должен создавать анимацию постепенного появления/исчезновения, но то, что я получил, - это просто мгновенное мигание между контентом. Надеюсь, мое описание достаточно и понятно.

StackView {
    id: stackView
    anchors.fill: parent
    delegate: StackViewDelegate {

        function transitionFinished(properties)
        {
            properties.exitItem.opacity = 1
        }

        property Component pushTransition: StackViewTransition {
            PropertyAnimation {
                target: enterItem
                property: "opacity"
                from: 0
                to: 1
                duration: 10
            }
            PropertyAnimation {
                target: exitItem
                property: "opacity"
                from: 1
                to: 0
                duration: 10
            }
        }
    }
    initialItem: Item {
        width: parent.width
        height: parent.height
        ListView {
            model: pageModel
            anchors.fill: parent
            delegate: AndroidDelegate {
                text: title
                onClicked: stackView.push(Qt.resolvedUrl(page))
            }
        }
    }
}

person Nadarian    schedule 01.04.2014    source источник


Ответы (3)


Я столкнулся с той же проблемой и попросил их поддержки - их пример неверен.

заменять

property Component pushTransition: StackViewTransition {

с

pushTransition: StackViewTransition {

и это должно работать. pushTransition на самом деле является свойством в StackViewDelegate.

Я все еще пытаюсь заставить работать функцию transitionFinished, потому что их пример тоже не работает.

person Scott    schedule 03.04.2014
comment
На самом деле, я считаю, что в моем случае работает transitionFinished. - person Nadarian; 03.04.2014

Продолжительность вашей анимации составляет 10 миллисекунд или 1/100 секунды.

person hmuelner    schedule 01.04.2014
comment
Ну пробовал разные значения: 1к, 10к, 100к все равно результата нет - person Nadarian; 01.04.2014

Это работает для меня:

Window {
    id: mainWindowId
    width: 1280
    height: 800

    StackView {
       id: stackViewId
       anchors.fill: parent

      replaceEnter: Transition {
          PropertyAnimation{
              property: "opacity"
              from: 0
              to: 1
              duration: 300
          }
      }

      replaceExit: Transition {
          PropertyAnimation{
              property: "opacity"
              from: 1
              to: 0
              duration: 250
          }
      }

      initialItem: "yourStartingPage.qml"

    }
}

И для изменения взглядов:

stackViewId.replace("yourOtherPage.qml")
person NapoLion    schedule 16.10.2019