QML Progress Spinner: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
[[Category:Snippets]]<br />[[Category:HowTo]]<br />[[Category:Developing_with_Qt::Qt Quick]]<br />[[Category:Developing_with_Qt::Qt Quick::QML]]
[[Category:Snippets]]
[[Category:HowTo]]
[[Category:Developing_with_Qt::Qt Quick]]
[[Category:Developing_with_Qt::Qt Quick::QML]]


[toc align_right=&quot;yes&amp;quot; depth=&quot;2&amp;quot;]
[toc align_right="yes" depth="2"]


= Progress Spinner =
= Progress Spinner =


This snippet article shows how to make a nice little progress bar/activity spinner in QML. In builds upon the &quot;Busy Indicator&amp;quot;:http://developer.qt.nokia.com/wiki/Busy_Indicator_for_QML and &quot;Simple Progress Bar&amp;quot;:http://developer.qt.nokia.com/wiki/Simple_QML_Progress_Bar components and adds some nice little animations.
This snippet article shows how to make a nice little progress bar/activity spinner in QML. In builds upon the "Busy Indicator":http://developer.qt.nokia.com/wiki/Busy_Indicator_for_QML and "Simple Progress Bar":http://developer.qt.nokia.com/wiki/Simple_QML_Progress_Bar components and adds some nice little animations.


This Progress Spinner component is very easy to embed into your new and existing QML components. This is what it looks like (without the animations of course):
This Progress Spinner component is very easy to embed into your new and existing QML components. This is what it looks like (without the animations of course):
Line 13: Line 16:
= Implementation =
= Implementation =


<code><br />import QtQuick 1.0<br />import ZapBsComponents 1.0
<code>
import QtQuick 1.0
import ZapBsComponents 1.0


Item {<br /> id: progressSpinner<br /> property alias minimum: progress.minimum<br /> property alias maximum: progress.maximum<br /> property alias value: progress.value<br /> property alias progressWidth: progress.width<br /> property alias progressHeight: progress.height<br /> property color color: &quot;#77B753&amp;quot;
Item {
id: progressSpinner
property alias minimum: progress.minimum
property alias maximum: progress.maximum
property alias value: progress.value
property alias progressWidth: progress.width
property alias progressHeight: progress.height
property color color: "#77B753"


BusyIndicator {<br /> id: busyIndicator<br /> anchors.fill: parent<br /> foregroundColor: progressSpinner.color<br /> opacity: ( value == maximum ) ? 0.0 : 1.0<br /> Behavior on opacity {<br /> NumberAnimation {<br /> duration: 100<br /> }<br /> }
BusyIndicator {
id: busyIndicator
anchors.fill: parent
foregroundColor: progressSpinner.color
opacity: ( value == maximum ) ? 0.0 : 1.0
Behavior on opacity {
NumberAnimation {
duration: 100
}
}


RotationAnimation<br /> {<br /> target: busyIndicator<br /> property: &quot;rotation&amp;quot; // Suppress a warning<br /> from: 0<br /> to: 360<br /> direction: RotationAnimation.Clockwise<br /> duration: 1000<br /> loops: Animation.Infinite<br /> running: progress.value &lt; progress.maximum<br /> }<br /> }
RotationAnimation
{
target: busyIndicator
property: "rotation" // Suppress a warning
from: 0
to: 360
direction: RotationAnimation.Clockwise
duration: 1000
loops: Animation.Infinite
running: progress.value < progress.maximum
}
}


SimpleProgressBar {<br /> id: progress<br /> anchors.centerIn: progressSpinner<br /> width: 2 * busyIndicator.actualInnerRadius - 12<br /> height: 12<br /> color: progressSpinner.color<br /> opacity: ( value  minimum || value  maximum ) ? 0.0 : 1.0<br /> Behavior on opacity {<br /> NumberAnimation {<br /> duration: 300<br /> }<br /> }
SimpleProgressBar {
id: progress
anchors.centerIn: progressSpinner
width: 2 * busyIndicator.actualInnerRadius - 12
height: 12
color: progressSpinner.color
opacity: ( value  minimum || value  maximum ) ? 0.0 : 1.0
Behavior on opacity {
NumberAnimation {
duration: 300
}
}


value: 35<br /> }<br />}<br /></code>
value: 35
}
}
</code>


= Usage =
= Usage =
Line 29: Line 75:
This little snippet demonstrates the fade in/out animations of the ProgressSpinner.—
This little snippet demonstrates the fade in/out animations of the ProgressSpinner.—


<code><br />import QtQuick 1.0
<code>
import QtQuick 1.0


Rectangle {<br /> id: root<br /> width: 640<br /> height: 360
Rectangle {
id: root
width: 640
height: 360


ProgressSpinner {<br /> id: progress<br /> x: 10<br /> y: 10<br /> width: 100<br /> height: 100
ProgressSpinner {
id: progress
x: 10
y: 10
width: 100
height: 100


SequentialAnimation on value {<br /> PauseAnimation { duration: 500 }<br /> NumberAnimation { duration: 1500; from: 0; to: 100; }<br /> PauseAnimation { duration: 500 }<br /> loops: Animation.Infinite<br /> }<br /> }<br />}
SequentialAnimation on value {
PauseAnimation { duration: 500 }
NumberAnimation { duration: 1500; from: 0; to: 100; }
PauseAnimation { duration: 500 }
loops: Animation.Infinite
}
}
}

Revision as of 09:24, 25 February 2015


[toc align_right="yes" depth="2"]

Progress Spinner

This snippet article shows how to make a nice little progress bar/activity spinner in QML. In builds upon the "Busy Indicator":http://developer.qt.nokia.com/wiki/Busy_Indicator_for_QML and "Simple Progress Bar":http://developer.qt.nokia.com/wiki/Simple_QML_Progress_Bar components and adds some nice little animations.

This Progress Spinner component is very easy to embed into your new and existing QML components. This is what it looks like (without the animations of course):

Progress Spinner

Implementation

import QtQuick 1.0
import ZapBsComponents 1.0

Item {
 id: progressSpinner
 property alias minimum: progress.minimum
 property alias maximum: progress.maximum
 property alias value: progress.value
 property alias progressWidth: progress.width
 property alias progressHeight: progress.height
 property color color: "#77B753"

BusyIndicator {
 id: busyIndicator
 anchors.fill: parent
 foregroundColor: progressSpinner.color
 opacity: ( value == maximum ) ? 0.0 : 1.0
 Behavior on opacity {
 NumberAnimation {
 duration: 100
 }
 }

RotationAnimation
 {
 target: busyIndicator
 property: "rotation" // Suppress a warning
 from: 0
 to: 360
 direction: RotationAnimation.Clockwise
 duration: 1000
 loops: Animation.Infinite
 running: progress.value < progress.maximum
 }
 }

SimpleProgressBar {
 id: progress
 anchors.centerIn: progressSpinner
 width: 2 * busyIndicator.actualInnerRadius - 12
 height: 12
 color: progressSpinner.color
 opacity: ( value  minimum || value  maximum ) ? 0.0 : 1.0
 Behavior on opacity {
 NumberAnimation {
 duration: 300
 }
 }

value: 35
 }
}

Usage

This little snippet demonstrates the fade in/out animations of the ProgressSpinner.—

import QtQuick 1.0

Rectangle {

id: root
width: 640
height: 360

ProgressSpinner {

id: progress
x: 10
y: 10
width: 100
height: 100

SequentialAnimation on value {

PauseAnimation { duration: 500 }
NumberAnimation { duration: 1500; from: 0; to: 100; }
PauseAnimation { duration: 500 }
loops: Animation.Infinite
}
}

}