--- /dev/null
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/particles/affectors
+qml.files = affectors.qml content
+qml.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/particles/affectors
+INSTALLS += target qml
+
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../../shared" as Examples
+
+/*!
+ \title QtQuick.Particles Examples - Affectors
+ \example particles/affectors
+ \brief This is a collection of examples using Affectors in the QML particle system.
+ \image qml-affectors-example.png
+
+ This is a collection of small QML examples relating to using Affectors in the particle system.
+ Each example is a small QML file emphasizing a particular element or feature.
+
+ Age demonstrates using an Age affector to prematurely end the lives of particles.
+ \snippet examples/particles/affectors/content/age.qml 0
+
+ As you move the affector around the screen, the particles inside it
+ (which haven't already been affected) jump to a period near the end
+ of their life. This gives them a short period to finish fading out,
+ but changing lifeLeft to 0 (the default), would cause them to reach
+ the end of their life instantly.
+
+ Attractor demonstrates using an Attractor affector to simulate a black hole
+ \snippet examples/particles/affectors/content/attractor.qml 0
+
+ All particles in the scene, including the rocket ship's exhaust and pellets, are pulled
+ towards the black hole. This effect is stronger closer to the black hole, so the
+ asteroids near the top of the screen are barely affected at all, while the ones
+ towards the middle sometimes curve drastically. To complete the effect, an Age
+ affector covers the black hole to destroy particles which come in contact with it.
+
+ Custom Affector manipulates the properties of the particles directly in javascript.
+ One Affector is used to make the leaves rock back and forth as they fall, looking more
+ leaf-like than just spinning in circles:
+ \snippet examples/particles/affectors/content/customaffector.qml 0
+ Another is used to provide a slightly varying friction to the leaves as they 'land',
+ to look more natural:
+ \snippet examples/particles/affectors/content/customaffector.qml 1
+
+ Friction is similar to the falling leaves in the custom affector, except that it uses a
+ flat friction the whole way down instead of custom affectors.
+ \snippet examples/particles/affectors/content/friction.qml 0
+
+ Gravity is a convenience affector for applying a constant acceleration to particles inside it
+ \snippet examples/particles/affectors/content/gravity.qml 0
+
+ GroupGoal sets up two particle groups for flaming and non-flaming balls, and gives you various
+ ways to transition between them.
+ \snippet examples/particles/affectors/content/groupgoal.qml unlit
+ The non-flaming balls have a one in a hundred chance of lighting on their own each second, but they also
+ have a GroupGoal set on the whole group. This affector affects all particles of the unlit group, when colliding
+ with particles in the lit group, and cause them to move to the lighting group.
+ \snippet examples/particles/affectors/content/groupgoal.qml lighting
+ lighting is an intermediate group so that the glow builds up and the transition is less jarring. So it automatically
+ moves into the lit group after 100ms.
+ \snippet examples/particles/affectors/content/groupgoal.qml lit
+ The lit group also has TrailEmitters on it for additional fire and smoke, but does not transition anywhere.
+ There are two more GroupGoal elements that allow particles in the unlit group to transition to the lighting group
+ (and then to the lit group).
+ \snippet examples/particles/affectors/content/groupgoal.qml groupgoal-pilot
+ The first is just an area bound to the location of an image of a pilot flame. When unlit balls pass through the flame,
+ they go straight to lit because the pilot flame is so hot.
+ \snippet examples/particles/affectors/content/groupgoal.qml groupgoal-ma
+ The second is bound to the location of the last pointer interaction, so that touching or clicking on unlit balls (which
+ is hard due to their constant movement) causes them to move to the lighting group.
+
+ Move shows some simple effects you can get by altering trajectory midway.
+ The red particles have an affector that affects their position, jumping them forwards by 120px.
+ \snippet examples/particles/affectors/content/move.qml A
+ The green particles have an affector that affects their velocity, but with some angle variation. By adding some random direction
+ velocity to their existing forwards velocity, they begin to spray off in a cone.
+ \snippet examples/particles/affectors/content/move.qml B
+ The blue particles have an affector that affects their acceleration, and because it sets relative to false this resets the acceleration instead of
+ adding to it. Once the blue particles reach the affector, their horizontal velocity stops increasing as their vertical velocity decreases.
+ \snippet examples/particles/affectors/content/move.qml C
+
+ SpriteGoal has an affector which interacts with the sprite engine of particles, if they are being drawn as sprites by ImageParticle.
+ \snippet examples/particles/affectors/content/spritegoal.qml 0
+ The SpriteGoal follows the image of the rocket ship on screen, and when it interacts with particles drawn by ImageParticle as sprites,
+ it instructs them to move immediately to the "explode" state, which in this case is the animation of the asteroid breaking into many pieces.
+
+ Turbulence has a flame with smoke, and both sets of particles being affected by a Turbulence affector. This gives a faint wind effect.
+ \snippet examples/particles/affectors/content/turbulence.qml 0
+ To make the wind change direction, subsitute a black and white noise image in the noiseSource parameter (it currently uses a default noise source).
+
+ Wander uses a Wander affector to add some horizontal drift to snowflakes as they fall down.
+ \snippet examples/particles/affectors/content/wander.qml 0
+ There are different movements given by applying the Wander to different attributes of the trajectory, so the example makes it easy to play around and see the difference.
+*/
+
+Item {
+ height: 480
+ width: 320
+ Examples.LauncherList {
+ id: ll
+ anchors.fill: parent
+ Component.onCompleted: {
+ addExample("Age", "Kills off particles that enter the affector", Qt.resolvedUrl("content/age.qml"));
+ addExample("Attractor", "Simulates a small black hole", Qt.resolvedUrl("content/attractor.qml"));
+ addExample("Custom Affector", "Custom falling leaves", Qt.resolvedUrl("content/customaffector.qml"));
+ addExample("Friction", "Leaves that slow down as they fall", Qt.resolvedUrl("content/friction.qml"));
+ addExample("Gravity", "Leaves that fall towards the earth as you move it", Qt.resolvedUrl("content/gravity.qml"));
+ addExample("GroupGoal", "Balls that can be set on fire various ways", Qt.resolvedUrl("content/groupgoal.qml"));
+ addExample("Move", "Some effects you can get by altering trajectory midway", Qt.resolvedUrl("content/move.qml"));
+ addExample("SpriteGoal", "A ship that makes asteroids explode", Qt.resolvedUrl("content/spritegoal.qml"));
+ addExample("Turbulence", "A candle with faint wind", Qt.resolvedUrl("content/turbulence.qml"));
+ addExample("Wander", "Drifting snow flakes", Qt.resolvedUrl("content/wander.qml"));
+ }
+ }
+}
--- /dev/null
+import QmlProject 1.1
+
+Project {
+ mainFile: "affectors.qml"
+
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+}
system: particles
sprites: Sprite {
name: "snow"
- source: "../images/snowflake.png"
+ source: "../../images/snowflake.png"
frameCount: 51
frameDuration: 40
frameDurationVariation: 8
y: ma.mouseY - 36
width: 72
height: 72
+ //! [0]
Age {
anchors.fill: parent
system: particles
lifeLeft: 1200
advancePosition: false
}
+ //! [0]
}
}
width: 360
height: 540
color: "black"
- property bool spacePressed: false
- focus: true
Image {
- source: "../images/finalfrontier.png"
+ source: "../../images/finalfrontier.png"
anchors.centerIn:parent
}
- Keys.onPressed: {
- if (event.key == Qt.Key_Space) {
- spacePressed = true;
- event.accepted = true;
- }
- }
- Keys.onReleased: {
- if (event.key == Qt.Key_Space) {
- spacePressed = false;
- event.accepted = true;
- }
- }
-
Emitter {
group: "stars"
system: particles
id: stars
groups: ["stars"]
system: particles
- source: "../images/star.png"
+ source: "../../images/star.png"
color: "white"
colorVariation: 0.1
alpha: 0
sprites: Sprite {
id: spinState
name: "spinning"
- source: "../images/meteor.png"
+ source: "../../images/meteor.png"
frameCount: 35
frameDuration: 60
}
id: shot
groups: ["shot"]
system: particles
- source: "../images/star.png"
+ source: "../../images/star.png"
color: "#0FF06600"
colorVariation: 0.3
id: engine
groups: ["engine"]
system: particles
- source: "../images/particle4.png"
+ source: "../../images/particle4.png"
color: "orange"
SequentialAnimation on color {
colorVariation: 0.2
}
+ //! [0]
Attractor {
id: gs; pointX: root.width/2; pointY: root.height/2; strength: 4000000;
system: particles
affectedParameter: Attractor.Acceleration
proportionalToDistance: Attractor.InverseQuadratic
}
+ //! [0]
Age {
system: particles
x: gs.pointX - 8;
}
Image {
- source:"../images/rocket2.png"
+ source:"../../images/rocket2.png"
id: ship
width: 45
height: 22
- MouseArea {
- id: ma
- anchors.fill: parent;
- drag.axis: Drag.XandYAxis
- drag.target: ship
+ //Automatic movement
+ SequentialAnimation on x {
+ loops: -1
+ NumberAnimation{to: root.width-45; easing.type: Easing.InOutQuad; duration: 2000}
+ NumberAnimation{to: 0; easing.type: Easing.OutInQuad; duration: 6000}
+ }
+ SequentialAnimation on y {
+ loops: -1
+ NumberAnimation{to: root.height-22; easing.type: Easing.OutInQuad; duration: 6000}
+ NumberAnimation{to: 0; easing.type: Easing.InOutQuad; duration: 2000}
}
}
Emitter {
group: "shot"
system: particles
emitRate: 32
- lifeSpan: 2000
- enabled: spacePressed
+ lifeSpan: 1000
+ enabled: true
size: 40
speed: PointDirection { x: 256; }
x: ship.x + ship.width
y: ship.y + ship.height/2
}
-
- Text {
- color: "white"
- anchors.bottom: parent.bottom
- text:"Drag the ship, Spacebar to fire."
- }
}
height: 600
Image {
- source: "../images/backgroundLeaves.jpg"
+ source: "../../images/backgroundLeaves.jpg"
anchors.fill: parent
}
ParticleSystem {
pace: 60
}
+ //! [0]
Affector {
system: sys
property real coefficient: 0.1
}
}
}
+ //! [0]
+ //! [1]
Affector {//Custom Friction, adds some 'randomness'
system: sys
- //onceOff: true
x: -60
width: parent.width + 120
height: 100
}
}
}
+ //! [1]
ImageParticle {
anchors.fill: parent
id: particles
system: sys
sprites: [Sprite {
- source: "../images/realLeaf1.png"
+ source: "../../images/realLeaf1.png"
frameCount: 1
frameDuration: 1
to: {"a":1, "b":1, "c":1, "d":1}
}, Sprite {
name: "a"
- source: "../images/realLeaf1.png"
+ source: "../../images/realLeaf1.png"
frameCount: 1
frameDuration: 10000
},
Sprite {
name: "b"
- source: "../images/realLeaf2.png"
+ source: "../../images/realLeaf2.png"
frameCount: 1
frameDuration: 10000
},
Sprite {
name: "c"
- source: "../images/realLeaf3.png"
+ source: "../../images/realLeaf3.png"
frameCount: 1
frameDuration: 10000
},
Sprite {
name: "d"
- source: "../images/realLeaf4.png"
+ source: "../../images/realLeaf4.png"
frameCount: 1
frameDuration: 10000
}
height: 600
Image {
- source: "../images/backgroundLeaves.jpg"
+ source: "../../images/backgroundLeaves.jpg"
anchors.fill: parent
}
ParticleSystem { id: sys }
id: particles
system: sys
sprites: [Sprite {
- source: "../images/realLeaf1.png"
+ source: "../../images/realLeaf1.png"
frameCount: 1
frameDuration: 1
to: {"a":1, "b":1, "c":1, "d":1}
}, Sprite {
name: "a"
- source: "../images/realLeaf1.png"
+ source: "../../images/realLeaf1.png"
frameCount: 1
frameDuration: 10000
},
Sprite {
name: "b"
- source: "../images/realLeaf2.png"
+ source: "../../images/realLeaf2.png"
frameCount: 1
frameDuration: 10000
},
Sprite {
name: "c"
- source: "../images/realLeaf3.png"
+ source: "../../images/realLeaf3.png"
frameCount: 1
frameDuration: 10000
},
Sprite {
name: "d"
- source: "../images/realLeaf4.png"
+ source: "../../images/realLeaf4.png"
frameCount: 1
frameDuration: 10000
}
y: 20
z:4
}
+
+ //! [0]
Friction {
anchors.fill: parent
anchors.margins: -40
system: sys
factor: 0.4
}
+ //! [0]
}
/****************************************************************************
-**
+*
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
Item {
id: window
- width: 480; height: 480
+ width: 320; height: 480
Rectangle {
id: sky
anchors.fill: parent
Rectangle {
id: ground
- width: parent.width * 2
+ width: parent.height * 2
height: parent.height
y: parent.height/2
- x: -parent.height/2
+ x: parent.width/2 - parent.height
transformOrigin: Item.Top
rotation: 0
gradient: Gradient {
}
ParticleSystem { id: sys }
+ //! [0]
Gravity {
system: sys
magnitude: 32
angle: ground.rotation + 90
}
+ //! [0]
Emitter {
system: sys
anchors.centerIn: parent
ImageParticle {
anchors.fill: parent
system: sys
- source: "../images/realLeaf1.png"
+ source: "../../images/realLeaf1.png"
}
}
ParticleSystem {
id: particles
anchors.fill: parent
+ // ![unlit]
ParticleGroup {
name: "unlit"
duration: 1000
to: {"lighting":1, "unlit":99}
ImageParticle {
- source: "../images/particleA.png"
+ source: "../../images/particleA.png"
colorVariation: 0.1
color: "#2060160f"
}
jump: true
}
}
+ // ![unlit]
+ // ![lighting]
ParticleGroup {
name: "lighting"
duration: 100
to: {"lit":1}
}
+ // ![lighting]
+ // ![lit]
ParticleGroup {
name: "lit"
duration: 10000
TrailEmitter {
id: fireballSmoke
group: "smoke"
+ // ![lit]
emitRatePerParticle: 120
lifeSpan: 2000
id: smoke
anchors.fill: parent
groups: ["smoke"]
- source: "../images/particle.png"
+ source: "../../images/particle.png"
colorVariation: 0
color: "#00111111"
}
id: pilot
anchors.fill: parent
groups: ["pilot"]
- source: "../images/particle.png"
+ source: "../../images/particle.png"
redVariation: 0.01
blueVariation: 0.4
color: "#0010004f"
id: flame
anchors.fill: parent
groups: ["flame", "lit", "lighting"]
- source: "../images/particleA.png"
+ source: "../../images/particleA.png"
colorVariation: 0.1
color: "#00ff400f"
}
sizeVariation: 2
endSize: 0
speed: PointDirection { y:-100; yVariation: 4; xVariation: 4 }
+ // ![groupgoal-pilot]
GroupGoal {
groups: ["unlit"]
goalState: "lit"
y: -55
height: 75
width: 30
- shape: MaskShape {source: "../images/matchmask.png"}
+ shape: MaskShape {source: "../../images/matchmask.png"}
}
+ // ![groupgoal-pilot]
}
+ // ![groupgoal-ma]
//Click to enflame
GroupGoal {
groups: ["unlit"]
x: ma.mouseX - width/2
y: ma.mouseY - height/2
}
+ // ![groupgoal-ma]
MouseArea {
id: ma
anchors.fill: parent
ImageParticle {
groups: ["A"]
anchors.fill: parent
- source: "../images/star.png"
+ source: "../../images/star.png"
color:"#FF1010"
redVariation: 0.8
}
height: 80
}
+ //! [A]
Affector {
groups: ["A"]
x: 120
once: true
position: PointDirection { x: 120; }
}
+ //! [A]
ImageParticle {
groups: ["B"]
anchors.fill: parent
- source: "../images/star.png"
+ source: "../../images/star.png"
color:"#10FF10"
greenVariation: 0.8
}
height: 10
}
+ //! [B]
Affector {
groups: ["B"]
x: 120
once: true
speed: AngleDirection { angleVariation:360; magnitude: 72 }
}
+ //! [B]
ImageParticle {
groups: ["C"]
anchors.fill: parent
- source: "../images/star.png"
+ source: "../../images/star.png"
color:"#1010FF"
blueVariation: 0.8
}
height: 80
}
+ //! [C]
Affector {
groups: ["C"]
x: 120
relative: false
acceleration: PointDirection { y: -80; }
}
+ //! [C]
}
}
ParticleSystem { id: sys }
Image {
- source: "../images/finalfrontier.png"
+ source: "../../images/finalfrontier.png"
transformOrigin: Item.Center
anchors.centerIn: parent
smooth: true
ImageParticle {
system: sys
groups: ["starfield"]
- source: "../images/star.png"
+ source: "../../images/star.png"
colorVariation: 0.3
color: "white"
}
sprites:[Sprite {
id: spinState
name: "spinning"
- source: "../images/meteor.png"
+ source: "../../images/meteor.png"
frameCount: 35
frameDuration: 40
randomStart: true
to: {"explode":0, "spinning":1}
},Sprite {
name: "explode"
- source: "../images/_explo.png"
+ source: "../../images/_explo.png"
frameCount: 22
frameDuration: 40
to: {"nullFrame":1}
},Sprite {//Not sure if this is needed, but seemed easiest
name: "nullFrame"
- source: "../images/nullRock.png"
+ source: "../../images/nullRock.png"
frameCount: 1
frameDuration: 1000
}
]
}
+ //! [0]
SpriteGoal {
groups: ["meteor"]
system: sys
goalState: "explode"
jump: true
- anchors.centerIn: holder//A bug in affectors currently isn't compensating for relative x,y. when that's fixed this can just anchors.fill: rocketShip
+ anchors.fill: rocketShip
width: 60
height: 60
}
+ //! [0]
Image {
id: rocketShip
- source: "../images/rocket.png"
+ source: "../../images/rocket.png"
smooth: true
anchors.centerIn: holder
rotation: (circle.percent+0.25) * 360
z:0
system: sys
groups: ["exhaust"]
- source: "../images/particle4.png"
+ source: "../../images/particle4.png"
color: "orange"
SequentialAnimation on color {
import QtQuick.Particles 2.0
Rectangle {
- width: 360
- height: 600
+ width: 320
+ height: 480
color: "#222222"
id: root
Image {
- source: "../images/candle.png"
+ source: "../../images/candle.png"
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottomMargin: -8
+ anchors.bottomMargin: -60
anchors.horizontalCenterOffset: 2
}
ParticleSystem {
onClicked: turb.enabled = !turb.enabled
}
+ //! [0]
Turbulence {
id: turb
system: ps
enabled: true
- height: (parent.height / 2)
- width: parent.width / 2
+ height: (parent.height / 2) - 4
+ width: parent.width
x: parent. width / 4
anchors.fill: parent
strength: 32
+ NumberAnimation on strength{from: 16; to: 64; easing.type: Easing.InOutBounce; duration: 1800; loops: -1}
}
+ //! [0]
ImageParticle {
groups: ["smoke"]
system: ps
- source: "../images/particle.png"
+ source: "../../images/particle.png"
color: "#11111111"
colorVariation: 0
}
ImageParticle {
groups: ["flame"]
system: ps
- source: "../images/particle.png"
+ source: "../../images/particle.png"
color: "#11ff400f"
colorVariation: 0.1
}
TrailEmitter {
id: smoke1
width: root.width
- height: root.height/2 - 20
+ height: root.height/2
system: ps
group: "smoke"
follow: "flame"
TrailEmitter {
id: smoke2
width: root.width
- height: root.height/2 - 40
+ height: root.height/2 - 20
system: ps
group: "smoke"
follow: "flame"
import QtQuick 2.0
import QtQuick.Particles 2.0
-import "../exampleslauncher/content" as UI
+import "../../../shared" as UI //Has a shared UI element
Rectangle {
width: 360
system: particles
sprites: Sprite {
name: "snow"
- source: "../images/snowflake.png"
+ source: "../../images/snowflake.png"
frameCount: 51
frameDuration: 40
frameDurationVariation: 8
}
}
+ //! [0]
Wander {
id: wanderer
system: particles
xVariance: 360/(wanderer.affectedParameter+1);
pace: 100*(wanderer.affectedParameter+1);
}
+ //! [0]
Emitter {
system: particles
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(affectors)
id: container
property string text: "Button"
- property string subText: "Just a button"
+ property string subText: ""
signal clicked
width: buttonLabel.width + 20; height: col.height + 12