QML:在 StackView 中,水平可滑动的视觉效果会持续存在

Posted

技术标签:

【中文标题】QML:在 StackView 中,水平可滑动的视觉效果会持续存在【英文标题】:QML: horizontal flickable visually lingers in StackView 【发布时间】:2019-02-10 10:18:05 【问题描述】:

假设您有一个较长的水平内容,因此您将其置于可滑动的状态以供用户滑动浏览。这可能是一张图片或图表或其他东西。当内容向右滑动以隐藏其左侧时,从堆栈中弹出页面时,会出现堆栈动画,其中所有内容都向右移动。然而,可滑动内容的之前隐藏的部分随后也会向右滑动并变得可见,直到动画结束。我想找到一种方法来防止这种情况发生。

这是一个红色矩形挥之不去的图片,以每秒 25 帧的速度仔细捕捉:

这是说明问题的最小示例代码:

import QtQuick 2.9
import QtQuick.Controls 2.2

ApplicationWindow 
    id: window
    visible: true
    width: 640
    height: 480

    header: ToolBar 
        contentHeight: toolButton.implicitHeight

        ToolButton 
            id: toolButton
            text: "<"
            onClicked: 
                stackView.pop()
            
        
    

    StackView 
        id: stackView
        initialItem: pageZero
        anchors.fill: parent
    

    Component 
        id: pageZero

        Column 
            Label 
                text: "Page zero"
            
            Button 
                text: "next"
                onClicked:  stackView.push(pageOne) 
            
        
    
    Component 
        id: pageOne

        Flickable 
            height: 200
            width: 200
            contentHeight: 200
            contentWidth: 300

            Rectangle 
                height: 200
                width: 300
                color: "red"
            
        
    

问题是,我应该放置什么处理程序来隐藏可轻弹在动画开始之前

【问题讨论】:

【参考方案1】:

好的,我发现了,实际上这个解决方案并不难。 (= 我需要做的是在过渡期间隐藏我的 flickable,并在过渡结束后显示,所以我添加了两行:

        Flickable 
            height: 200
            width: 200
            contentHeight: 200
            contentWidth: 300
            // watch this next line
            StackView.onDeactivating: rect.visible = false
            StackView.onActivating: rect.visible = true

            Rectangle 
                id: rect
                height: 200
                width: 300
                color: "red"
            
        

【讨论】:

以上是关于QML:在 StackView 中,水平可滑动的视觉效果会持续存在的主要内容,如果未能解决你的问题,请参考以下文章

Android StackView 类型的横向滑动布局

如何使用 QML StackView?

QML - 垂直滑动视图?

如何使 QML 可滑动内容隐藏在可滑动边界之外?

QML - 垂直滑动视图?

QML StackView:动态更改replaceEnter/Exit动画