2022-05-13 13:12:05 +00:00
|
|
|
// Copyright (C) 2021 The Qt Company Ltd.
|
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
2011-09-19 05:27:49 +00:00
|
|
|
|
|
|
|
// This example shows how to create your own highlight delegate for a ListView
|
|
|
|
// that uses a SpringAnimation to provide custom movement when the
|
|
|
|
// highlight bar is moved between items.
|
|
|
|
|
2021-11-08 15:46:32 +00:00
|
|
|
import QtQuick
|
|
|
|
import QtQuick.Particles
|
2011-09-19 05:27:49 +00:00
|
|
|
|
|
|
|
Rectangle {
|
2019-09-17 16:10:59 +00:00
|
|
|
id: root
|
|
|
|
|
2011-09-19 05:27:49 +00:00
|
|
|
property real delegateHeight: 65
|
|
|
|
width: 200; height: 300
|
|
|
|
gradient: Gradient {
|
|
|
|
GradientStop { position: 0.0; color: "#EEEEFF" }
|
|
|
|
GradientStop { position: 1.0; color: "lightblue" }
|
|
|
|
}
|
|
|
|
|
|
|
|
// Define a delegate component. A component will be
|
|
|
|
// instantiated for each visible item in the list.
|
2020-02-04 13:23:16 +00:00
|
|
|
component PetDelegate: Item {
|
2019-09-17 16:10:59 +00:00
|
|
|
id: pet
|
|
|
|
width: 200; height: root.delegateHeight
|
2020-02-04 13:23:16 +00:00
|
|
|
z: 10
|
2019-09-17 16:10:59 +00:00
|
|
|
|
|
|
|
required property int index
|
|
|
|
required property string name
|
|
|
|
required property string type
|
|
|
|
required property int age
|
|
|
|
|
2020-02-04 13:23:16 +00:00
|
|
|
Column {
|
2019-09-17 16:10:59 +00:00
|
|
|
Text {color: "white"; text: pet.name; font.pixelSize: 18 }
|
|
|
|
Text {color: "white"; text: 'Type: ' + pet.type; font.pixelSize: 14 }
|
|
|
|
Text {color: "white"; text: 'Age: ' + pet.age; font.pixelSize: 14 }
|
2020-02-04 13:23:16 +00:00
|
|
|
}
|
2019-09-17 16:10:59 +00:00
|
|
|
MouseArea { anchors.fill: parent; onClicked: listView.currentIndex = pet.index; }
|
2020-02-04 13:23:16 +00:00
|
|
|
// indent the item if it is the current item
|
|
|
|
states: State {
|
|
|
|
name: "Current"
|
2019-09-17 16:10:59 +00:00
|
|
|
when: pet.ListView.isCurrentItem
|
2021-10-28 07:34:00 +00:00
|
|
|
PropertyChanges { pet.x: 20 }
|
2020-02-04 13:23:16 +00:00
|
|
|
}
|
|
|
|
transitions: Transition {
|
|
|
|
NumberAnimation { properties: "x"; duration: 200 }
|
2011-09-19 05:27:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-09-06 20:53:50 +00:00
|
|
|
// Define a highlight with customized movement between items.
|
2020-02-04 13:23:16 +00:00
|
|
|
component HighlightBar : Rectangle {
|
|
|
|
z: 0
|
2019-09-17 16:10:59 +00:00
|
|
|
width: 200; height: root.delegateHeight
|
2020-02-04 13:23:16 +00:00
|
|
|
gradient: Gradient {
|
|
|
|
GradientStop { position: 0.0; color: "#99FF99" }
|
|
|
|
GradientStop { position: 1.0; color: "#88FF88" }
|
|
|
|
}
|
|
|
|
y: listView.currentItem.y;
|
|
|
|
Behavior on y { SpringAnimation { spring: 2; damping: 0.2 } }
|
|
|
|
//! [1]
|
|
|
|
ImageParticle {
|
|
|
|
anchors.fill: parent
|
|
|
|
system: particles
|
2021-11-08 15:46:32 +00:00
|
|
|
source: "images/flower.png"
|
2020-02-04 13:23:16 +00:00
|
|
|
color: "red"
|
|
|
|
clip: true
|
|
|
|
alpha: 1.0
|
2011-09-19 05:27:49 +00:00
|
|
|
}
|
2020-02-04 13:23:16 +00:00
|
|
|
//! [1]
|
2011-09-19 05:27:49 +00:00
|
|
|
}
|
2011-09-20 07:16:36 +00:00
|
|
|
|
2011-09-19 05:27:49 +00:00
|
|
|
ListView {
|
|
|
|
id: listView
|
|
|
|
width: 200; height: parent.height
|
|
|
|
|
|
|
|
model: petsModel
|
2020-02-04 13:23:16 +00:00
|
|
|
delegate: PetDelegate {}
|
2011-09-19 05:27:49 +00:00
|
|
|
focus: true
|
|
|
|
|
|
|
|
// Set the highlight delegate. Note we must also set highlightFollowsCurrentItem
|
|
|
|
// to false so the highlight delegate can control how the highlight is moved.
|
2020-02-04 13:23:16 +00:00
|
|
|
highlight: HighlightBar {}
|
2011-09-19 05:27:49 +00:00
|
|
|
highlightFollowsCurrentItem: false
|
|
|
|
|
|
|
|
ParticleSystem { id: particles }
|
|
|
|
Emitter {
|
|
|
|
system: particles
|
|
|
|
anchors.fill: parent
|
2012-11-23 16:17:45 +00:00
|
|
|
emitRate: 0
|
2011-09-19 05:27:49 +00:00
|
|
|
lifeSpan: 10000
|
|
|
|
size: 24
|
|
|
|
sizeVariation: 8
|
2012-06-25 02:01:46 +00:00
|
|
|
velocity: AngleDirection { angleVariation: 360; magnitude: 3 }
|
2011-09-19 05:27:49 +00:00
|
|
|
maximumEmitted: 10
|
|
|
|
startTime: 5000
|
2012-11-23 16:17:45 +00:00
|
|
|
Timer { running: true; interval: 10; onTriggered: parent.emitRate = 1; }
|
2011-09-19 05:27:49 +00:00
|
|
|
}
|
|
|
|
|
2012-06-18 04:13:31 +00:00
|
|
|
//! [0]
|
2011-09-19 05:27:49 +00:00
|
|
|
ImageParticle {
|
|
|
|
anchors.fill: parent
|
|
|
|
system: particles
|
2021-11-08 15:46:32 +00:00
|
|
|
source: "images/flower.png"
|
2011-09-19 05:27:49 +00:00
|
|
|
alpha: 0.1
|
|
|
|
color: "white"
|
|
|
|
rotationVariation: 180
|
|
|
|
z: -1
|
|
|
|
}
|
2012-06-18 04:13:31 +00:00
|
|
|
//! [0]
|
2011-09-19 05:27:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ListModel {
|
|
|
|
id: petsModel
|
|
|
|
ListElement {
|
|
|
|
name: "Polly"
|
|
|
|
type: "Parrot"
|
|
|
|
age: 12
|
|
|
|
size: "Small"
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Penny"
|
|
|
|
type: "Turtle"
|
|
|
|
age: 4
|
|
|
|
size: "Small"
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Warren"
|
|
|
|
type: "Rabbit"
|
|
|
|
age: 2
|
|
|
|
size: "Small"
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Spot"
|
|
|
|
type: "Dog"
|
|
|
|
age: 9
|
|
|
|
size: "Medium"
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Schrödinger"
|
|
|
|
type: "Cat"
|
|
|
|
age: 2
|
|
|
|
size: "Medium"
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Joey"
|
|
|
|
type: "Kangaroo"
|
|
|
|
age: 1
|
|
|
|
size: "Medium"
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Kimba"
|
|
|
|
type: "Bunny"
|
|
|
|
age: 65
|
|
|
|
size: "Large"
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Rover"
|
|
|
|
type: "Dog"
|
|
|
|
age: 5
|
|
|
|
size: "Large"
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Tiny"
|
|
|
|
type: "Elephant"
|
|
|
|
age: 15
|
|
|
|
size: "Large"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|