我确信这有一个简单的答案,但我很难找到它。
我试图做的是基于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
,但我认为这已固定在主窗口上。
任何帮助将不胜感激。
答案 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
}
}
}