QML StackView 使用(滑动方式改变)

1、定义一个StackView,初始窗口为WindowsA,当点击WindowsA的时候,将WindowsB压栈并显示WindwsB,当点击WindowB时,将栈顶的WindowsB弹出,又显示WindowsA。

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.2
Window {
    id: mainWindow
    visible: true    
    width: Screen.width 
    height: Screen.height 
    StackView {
        id: stackView
        initialItem: WindowsA
        anchors.fill: parent
        //focus: true
            
    }
    Component {
        id: WindowsA

        Rectangle {
            color: "red"
            anchors.fill: parent           
            Rectangle{
                id: recA
                anchors.fill: parent
            }
            MouseArea {
                anchors.fill: parent
                onClicked: {
                    stackView.push(WindowsB)

                }
            }            
        }
    }
    Component {
        id: WindowsB

        Rectangle {
            color: "black"
            anchors.fill: parent
            Rectangle{
                id: recB                
                anchors.fill: parent
            }  
            MouseArea {
                anchors.fill: parent
                onClicked: {
                     stackView.pop()
                }
            }         
        }
    }
}

2、显示方法改动:

默认显示方式是:WindowsA 和WindowsB交互滑动显示。通过重写popEnter、popExit、pushEnter响应方式,改变窗口切换方式

StackView {
        id: stackView
        initialItem:  WindowsA
        anchors.fill: parent
        //focus: true
        //
        popEnter: replaceExit
        popExit: replaceExit
        pushEnter: replaceEnter
        replaceEnter: Transition { //下边是转场动画
            PropertyAnimation {
                target: stackView
                property: "opacity"
                easing.type: Easing.InBack
                from: 0
                to: 1
                duration: 1 //单位ms 切换时间
            }
        }
        replaceExit: Transition { //下边是转场动画

            PropertyAnimation {
                target: stackView
                property: "opacity"
                from: 0
                to: 1
                easing.type: Easing.InQuad
                duration: 500 //单位ms 切换时间
            }
        }
    }

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

notfindjob

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值