滚动时如何向上/向下滑动工具栏?

时间:2018-01-09 15:03:17

标签: qt qml qtquick2 qtquickcontrols2

我确信这有一个简单的答案,但我很难找到它。 我试图做的是基于header元素的滚动(或移动平台中的滑动)ApplicationWindow内的ListView的简单幻灯片行为。

目的是向上或向下滑动ToolBar,同时以平稳的方式垂直轻拂ListView

以下是一个例子:

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Window 2.2
import QtQuick.Layouts 1.1

ApplicationWindow {
    id: mainWindow
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    header: 
        RowLayout {
            height: 30
            ToolBar {
                id: toolBar
                anchors.fill: parent
                ToolButton {
                    id: toolBtn
                    width: parent.height
                    height: width
                }
                Text {
                    id: toolBarText
                    text: qsTr("Toggle hide/show when scroll")
                    anchors.fill: parent
                    horizontalAlignment: Text.AlignHCenter
                    verticalAlignment: Text.AlignVCenter
                        font.pixelSize: 25
                }
            Behavior on y {
                NumberAnimation {
                    //Does not work
                }
            }
        }
    }
    ListModel {
        id: myModel
        Component.onCompleted: {
            for(var i = 0; i <= 100; ++i) {
                myModel.append({pos: i})
            }
        }
    }
    ListView {
        anchors.fill: parent
        spacing: 16
        anchors.top: mainWindow.header.bottom
        model: myModel
        delegate: Rectangle {
            width: parent.width
            height: 50
            border.color: 'black'
            Text {
                text: pos
                anchors.centerIn: parent
            }
        }
        onFlickingVerticallyChanged: {
            //Does not work
            toolBar.y = toolBar.height * (-1)
        }
    } 
}

正如您所看到的,我尝试更改垂直位置onFlickingVerticallyChanged并在此设置NumberAnimation,但我认为这已固定在主窗口上。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您可以使用ListView::headerPositioning

import QtQuick 2.7
import QtQuick.Controls 2.0

ApplicationWindow {
    id: window
    width: 320
    height: 480
    visible: true

    ListView {
        model: 100
        anchors.fill: parent
        delegate: ItemDelegate {
            text: "Item #" + index
        }

        headerPositioning: ListView.PullBackHeader
        header: ToolBar {
            width: parent.width
            z: 2 // above the delegate items
        }
    }
}