SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Qt 
Animation 
William.L 2010-05-19 
wiliwe@gmail.com
Outline 
 What is animation? 
 Timer 
 Timeline 
 Animation Framework 
 State Machine Framework 
 GraphicsView Framework
What is animation? 
 A series of pictures, each of which is shown for a 
fixed period
Timer (1/2) 
 Class – QTimer 
 Provides repetitive and single-shot timers 
 Emit the timeout() signal at constant intervals. 
 Usage 
 Create a QTimer 
 Connect its timeout() signal to the appropriate slots 
 Call start() with constant interval(in millisecond) parameter 
 From then on it will emit the timeout() signal at constant intervals. 
QTimer *timer = new QTimer(this); 
connect(timer, SIGNAL(timeout()), 
this, SLOT(doSomethingWhenTimeout())); 
timer-start(1000);
Timer (2/2) 
 Example 
 Timer-Button 
 A QPushButton moving between two points
Timeline (1/3) 
 Class – QTimeLine 
 Introduced in Qt 4.2 
 Most commonly used to animate a GUI control by calling 
a slot periodically. 
 Usage 
 Construct a QTimeLine object with duration value in 
milliseconds 
 The duration describes for how long the animation will run. 
 Set a suitable frame range by calling setFrameRange(). 
 Connect the frameChanged() signal to a suitable slot in the 
widget you wish to animate. 
 Ex : call setValue() in QProgressBar 
 Finally calling start(), QTimeLine will enter Running state 
 When done, QTimeLine enters NotRunning state, and emits 
finished().
Timeline (2/3) 
 Usage 
// Construct a 1-second(1000ms) timeline with a frame range of 0 - 100 
QTimeLine *timeLine = new QTimeLine (1000, Parent); 
timeLine-setFrameRange (0, 100); 
connect ( timeLine, SIGNAL(frameChanged(int)), 
widget, SLOT(Widget-Slot()) );
Timeline (3/3) 
 Other Methods 
 setLoopCount() 
 Holds the number of times the timeline should loop before it's 
finished. 
 0 means that the timeline will loop forever. 
 setUpdateInterval() 
 Holds the time in milliseconds between each time QTimeLine 
updates its current time 
 Default is 40ms (e.g. 25 frames per second) 
 setCurveShape() 
 Holds the shape of the timeline curve (how the timeline’s velocity 
change) 
 Default is EaseInOutCurve 
 Example 
 Timeline-Progressbar 
 Use timeline to increase the progress of the progress bar.
Animation Framework (1/5) 
 Introduced in 4.6 
 Part of the Kinetic project 
 Makes it easy to animate QObjects, including QWidgets, 
by allowing Qt properties to be animated. 
 Animations are controlled using Easing Curves and can 
be grouped together.
Animation Framework (2/5) 
 Perform animation of a Qt property (color, size, 
location, etc.) 
 QPropertyAnimation class 
 Containers for animating animations together 
 QSequentialAnimationGroup class 
 Contains animations are animating in sequence 
 QParallelAnimationGroup class 
 Contains animations are animating in parallel
Animation Framework (3/5) 
 Usage 
 Create a widget instance wanted to be animated. 
 Create a QPropertyAnimation instance passed widget instance 
and the widget’s property name wanted to be animated 
 Set animation duration 
 Set animated widget’s star/end property value through 
QPropertyAnimation methods, setStartValue() / setEndValue() 
 Call QPropertyAnimation’s start() method to start animating 
QPropertyAnimation *animation = new QPropertyAnimation(Widget, geometry); 
animation-setDuration(10000); // 10 seconds 
animation-setStartValue(QRect(250, 250, 100, 30)); 
animation-setEndValue(QRect(500, 450, 100, 30)); 
animation-start();
Animation Framework (4/5) 
 Fine Control 
 setKeyValueAt (step, value) 
 Creates a key frame at the given step with the given value. The given 
step must be in the range 0 to 1. 
QPropertyAnimation *animation = new QPropertyAnimation(Widget, geometry); 
animation-setDuration(10000); // 10 seconds 
animation.setKeyValueAt(0, QRect(250, 250, 100, 30)); 
animation.setKeyValueAt(0.25, QRect(250, 450, 100, 30)); 
animation.setKeyValueAt(0.5, QRect(500, 450, 100, 30)); 
animation.setKeyValueAt(0.75, QRect(500, 250, 100, 30)); 
animation.setKeyValueAt(1, QRect(250, 250, 100, 30)); 
animation-start();
Animation Framework (5/5) 
 Example 
 AnimFmwk-BounceEasyCurve-ParalSequ 
 Three buttons animating in sequential and parallel animations 
with easing curve 
 AnimFmwk-SetKeyValue 
 An animating button controlled by setKeyValueAt()
Qt State Machine Framework (1/7) 
 Classes – QStateMachine, QState, QFinalState, 
QSignalTransition 
 For creating and executing state graphs. 
 Provides an API and execution model that can be used 
to effectively embed the elements and semantics of 
statecharts in Qt applications. 
 Qt's event system is used to drive the state machines. 
 The animation framework also plugs into the new Qt 
state machine by allowing an animation to be played 
when transitions are triggered.
Qt State Machine Framework (2/7) 
 Components 
 QStateMachine 
 Manages a set of states and transitions 
 Hierarchical 
 Use the addState() function to add a top-level state(QState) to the 
state machine. 
 Before the machine can be started, use setInitialState() method to 
set the initial state 
 Call start() method to start the state machine 
 The started() signal is emitted when the initial state is entered 
 Call stop() to stop the state machine explicitly 
S1 
S1-1 S1-2 
S2
Qt State Machine Framework (3/7) 
 Components 
 QState 
 Represents a general-purpose state for QStateMachine 
 Can have child states 
 Can have transitions to other states 
 Use addTransition(sender,signal,target-state) method to add a 
transition, this will return a QSignalTransition object 
 Call addAnimation() of the returned QSignalTransition object and 
pass a QPropertyAnimation object to create a transition 
animation 
 QFinalState 
 Represents a final state 
 Used to communicate that a QStateMachine has finished its work 
 finished() signal will be emitted when entering the final state
Qt State Machine Framework (4/7) 
 Components 
 QSignalTransition 
 Provides a transition based on a Qt signal.
Qt State Machine Framework (5/7)
Qt State Machine Framework (6/7) 
 Usage 
QPushButton button(StateMachine Button); 
button.show(); 
QStateMachine machine; 
QState *state1 = new QState(); 
state1-assignProperty(button, geometry, QRect(200, 200, 100, 100)); 
QState *state2 = new QState(); 
state2-assignProperty(button, geometry, QRect(450, 450, 100, 100)); 
QFinalState *state3 = new QFinalState(); 
QSignalTransition *transition1 = state1-addTransition(button, SIGNAL(clicked()), state2); 
transition1-addAnimation(new QPropertyAnimation(button, geometry)); 
state2-addTransition(button, SIGNAL(clicked()), state3); 
machine.addState(state1); 
machine.addState(state2); 
machine.addState(state3); 
QObject::connect(machine, SIGNAL(finished()),QApplication::instance(), SLOT(quit())); 
machine.setInitialState(state1); 
machine.start();
Qt State Machine Framework (7/7) 
 Example 
 StateMachine-AnimButton 
 A QPushButton moves and changes its states when it is 
pressed. When reaching final state, the application will quit.
GraphicsView Framework (1/8) 
 Introduced in Qt 4.2 
 Replaced its predecessor, QCanvas 
 Item-based 
 Provides 
 A surface(scene) for managing and interacting with a large 
number of custom-made 2D graphical items 
 A view widget for visualizing the items, with support for zooming 
and rotation. 
 Items are varying geometric shapes(rectangle, line, circle, etc.)
GraphicsView Framework (2/8) 
Scene(Canvas) 
Line item 
Text item 
Rectangle item 
View 
Vertical 
Scrollbar 
Thumb 
Horizontal Scrollbar 
Thumb 
Ellipse 
item 
The dash-line 
rectangle is the 
visible area to 
human
GraphicsView Framework (3/8) 
 Components 
 The Scene - QGraphicsScene 
 Serves as a container for QGraphicsItem objects 
 Manages a large number of items 
 Propagating events from QGraphicsView to each item 
 Managing item state, such as item selection and focus.
GraphicsView Framework (4/8) 
 Components 
 The View - QGraphicsView 
 Provides the view widget 
 To visualize the contents of a scene 
 It is a scroll area 
 Can attach several views to the same scene 
 provide several viewports into the same data set. 
 Receives input events from the keyboard and mouse, and translates 
these to scene events
GraphicsView Framework (5/8) 
 Components 
 The Item – QGraphicsItem 
 The base class for graphical items in a scene 
 Detect mouse events 
 Grab keyboard input focus 
 Drag  Drop 
 Grouping 
 Collision detection
GraphicsView Framework (6/8) 
 Comparison between GraphicsView 
framework and Clutter 
Clutter 
Stage 
GraphicsView 
Framework 
GraphicsScene 
The place where 
visual elements 
exist (canvas) 
Visual Element GraphicsItem Actor 
Represnetation 
Viewport GraphicsView Gtk_Clutter_Viewport
GraphicsView Framework (7/8) 
 Usage 
 Create a QGraphicsScene object 
 Add objects of QGraphicsItem to the QGraphicsScene object 
using addXXX() method, where “XXX” means the type of 
graphics item. 
 Create a QGraphicsView object and set the created 
QGraphicsScene object with the method setScene() 
 Finally, let QGraphicsView object be visible by calling show() 
method. Or add created QGraphicsView object to a 
QMainWindow object by calling setCentralWidget()
GraphicsView Framework (8/8) 
 Example 
 GrphView-SimpleAnim 
 Shows how scene/view/items work together and an animation 
that a rectangle graphic item moves and fades out.
Example Source Codes Download 
 The example codes for this slide (GitHub). 
 https://github.com/wiliwe/qt-animation-example.git 
 Using Git tool to download: 
git clone https://github.com/wiliwe/qt-animation-example.git
References 
 http://doc.qt.nokia.com/4.6/qtimer.html 
 http://doc.qt.nokia.com/4.6/qtimeline.html 
 http://doc.qt.nokia.com/4.6/qtimeline.html#CurveShape-enum 
 http://doc.qt.nokia.com/4.6/animation-overview.html 
 http://doc.qt.nokia.com/4.6/statemachine-api.html 
 http://doc.qt.nokia.com/4.6/graphicsview.html 
 http://doc.qt.nokia.com/4.6/qgraphicsscene.html 
 http://doc.qt.nokia.com/4.6/qgraphicsitem.html

Contenu connexe

Tendances

Crank web deflection.b (class iii)
Crank web deflection.b (class iii)Crank web deflection.b (class iii)
Crank web deflection.b (class iii)
Frenki Niken
 

Tendances (20)

UI Programming with Qt-Quick and QML
UI Programming with Qt-Quick and QMLUI Programming with Qt-Quick and QML
UI Programming with Qt-Quick and QML
 
How MQTT work ?
How MQTT work ?How MQTT work ?
How MQTT work ?
 
Qt Application Programming with C++ - Part 2
Qt Application Programming with C++ - Part 2Qt Application Programming with C++ - Part 2
Qt Application Programming with C++ - Part 2
 
Best Practices in Qt Quick/QML - Part I
Best Practices in Qt Quick/QML - Part IBest Practices in Qt Quick/QML - Part I
Best Practices in Qt Quick/QML - Part I
 
Best Practices in Qt Quick/QML - Part 1 of 4
Best Practices in Qt Quick/QML - Part 1 of 4Best Practices in Qt Quick/QML - Part 1 of 4
Best Practices in Qt Quick/QML - Part 1 of 4
 
Qt for Python
Qt for PythonQt for Python
Qt for Python
 
Penjelasan Materi Web Server
Penjelasan Materi Web Server Penjelasan Materi Web Server
Penjelasan Materi Web Server
 
Crank web deflection.b (class iii)
Crank web deflection.b (class iii)Crank web deflection.b (class iii)
Crank web deflection.b (class iii)
 
Docker Networking Deep Dive
Docker Networking Deep DiveDocker Networking Deep Dive
Docker Networking Deep Dive
 
Introduction MQTT in Chinese
Introduction MQTT in ChineseIntroduction MQTT in Chinese
Introduction MQTT in Chinese
 
Introduction MQTT in English
Introduction MQTT in EnglishIntroduction MQTT in English
Introduction MQTT in English
 
MAKALAH SISTEM OPERASI TENAGA LISTRIK “PLC Sebagai SISTEM KOMUNIKASI ANTAR GA...
MAKALAH SISTEM OPERASI TENAGA LISTRIK “PLC Sebagai SISTEM KOMUNIKASI ANTAR GA...MAKALAH SISTEM OPERASI TENAGA LISTRIK “PLC Sebagai SISTEM KOMUNIKASI ANTAR GA...
MAKALAH SISTEM OPERASI TENAGA LISTRIK “PLC Sebagai SISTEM KOMUNIKASI ANTAR GA...
 
Docker
DockerDocker
Docker
 
MQTT
MQTTMQTT
MQTT
 
Tìm hiểu về NodeJs
Tìm hiểu về NodeJsTìm hiểu về NodeJs
Tìm hiểu về NodeJs
 
오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기
 
Bab 3 flip flop
Bab 3   flip flopBab 3   flip flop
Bab 3 flip flop
 
Orienté Objet : erreur historique ou voie à poursuivre ?
Orienté Objet : erreur historique ou voie à poursuivre ?Orienté Objet : erreur historique ou voie à poursuivre ?
Orienté Objet : erreur historique ou voie à poursuivre ?
 
Introduction To Docker, Docker Compose, Docker Swarm
Introduction To Docker, Docker Compose, Docker SwarmIntroduction To Docker, Docker Compose, Docker Swarm
Introduction To Docker, Docker Compose, Docker Swarm
 
[ko] Kernel Networking Stack 진입 장벽 허물기
[ko] Kernel Networking Stack 진입 장벽 허물기[ko] Kernel Networking Stack 진입 장벽 허물기
[ko] Kernel Networking Stack 진입 장벽 허물기
 

En vedette

Efficient Graphics with Qt
Efficient Graphics with QtEfficient Graphics with Qt
Efficient Graphics with Qt
Ariya Hidayat
 

En vedette (15)

Special Effects with Qt Graphics View
Special Effects with Qt Graphics ViewSpecial Effects with Qt Graphics View
Special Effects with Qt Graphics View
 
Creating Slick User Interfaces With Qt
Creating Slick User Interfaces With QtCreating Slick User Interfaces With Qt
Creating Slick User Interfaces With Qt
 
Case Study: Using Qt to Develop Advanced GUIs & Advanced Visualization Software
Case Study: Using Qt to Develop Advanced GUIs & Advanced Visualization SoftwareCase Study: Using Qt to Develop Advanced GUIs & Advanced Visualization Software
Case Study: Using Qt to Develop Advanced GUIs & Advanced Visualization Software
 
Efficient Graphics with Qt
Efficient Graphics with QtEfficient Graphics with Qt
Efficient Graphics with Qt
 
Usage Note of Apache Thrift for C++ Java PHP Languages
Usage Note of Apache Thrift for C++ Java PHP LanguagesUsage Note of Apache Thrift for C++ Java PHP Languages
Usage Note of Apache Thrift for C++ Java PHP Languages
 
Learn how to develop applications and UIs with Qt Commercial
Learn how to develop applications and UIs with Qt CommercialLearn how to develop applications and UIs with Qt Commercial
Learn how to develop applications and UIs with Qt Commercial
 
Android GDB Debugging (Chinese)
Android GDB Debugging (Chinese)Android GDB Debugging (Chinese)
Android GDB Debugging (Chinese)
 
Qt Widget In-Depth
Qt Widget In-DepthQt Widget In-Depth
Qt Widget In-Depth
 
Android Storage - StorageManager & OBB
Android Storage - StorageManager & OBBAndroid Storage - StorageManager & OBB
Android Storage - StorageManager & OBB
 
MGCP Overview
MGCP OverviewMGCP Overview
MGCP Overview
 
SE Computer, Programming Laboratory(210251) University of Pune
SE Computer, Programming Laboratory(210251) University of PuneSE Computer, Programming Laboratory(210251) University of Pune
SE Computer, Programming Laboratory(210251) University of Pune
 
Android Storage - Internal and External Storages
Android Storage - Internal and External StoragesAndroid Storage - Internal and External Storages
Android Storage - Internal and External Storages
 
Introduction to SIP(Session Initiation Protocol)
Introduction to SIP(Session Initiation Protocol)Introduction to SIP(Session Initiation Protocol)
Introduction to SIP(Session Initiation Protocol)
 
MTP & PTP
MTP & PTPMTP & PTP
MTP & PTP
 
Android Storage - Vold
Android Storage - VoldAndroid Storage - Vold
Android Storage - Vold
 

Similaire à Qt Animation

[C++ gui programming with qt4] chap9
[C++ gui programming with qt4] chap9[C++ gui programming with qt4] chap9
[C++ gui programming with qt4] chap9
Shih-Hsiang Lin
 

Similaire à Qt Animation (20)

State Machine Framework
State Machine FrameworkState Machine Framework
State Machine Framework
 
Petri Niemi Qt Advanced Part 2
Petri Niemi Qt Advanced Part 2Petri Niemi Qt Advanced Part 2
Petri Niemi Qt Advanced Part 2
 
Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)
 
[C++ gui programming with qt4] chap9
[C++ gui programming with qt4] chap9[C++ gui programming with qt4] chap9
[C++ gui programming with qt4] chap9
 
Qt & Webkit
Qt & WebkitQt & Webkit
Qt & Webkit
 
The Ring programming language version 1.6 book - Part 67 of 189
The Ring programming language version 1.6 book - Part 67 of 189The Ring programming language version 1.6 book - Part 67 of 189
The Ring programming language version 1.6 book - Part 67 of 189
 
The Ring programming language version 1.5.1 book - Part 61 of 180
The Ring programming language version 1.5.1 book - Part 61 of 180The Ring programming language version 1.5.1 book - Part 61 of 180
The Ring programming language version 1.5.1 book - Part 61 of 180
 
The Ring programming language version 1.10 book - Part 76 of 212
The Ring programming language version 1.10 book - Part 76 of 212The Ring programming language version 1.10 book - Part 76 of 212
The Ring programming language version 1.10 book - Part 76 of 212
 
The Ring programming language version 1.8 book - Part 71 of 202
The Ring programming language version 1.8 book - Part 71 of 202The Ring programming language version 1.8 book - Part 71 of 202
The Ring programming language version 1.8 book - Part 71 of 202
 
The Ring programming language version 1.8 book - Part 67 of 202
The Ring programming language version 1.8 book - Part 67 of 202The Ring programming language version 1.8 book - Part 67 of 202
The Ring programming language version 1.8 book - Part 67 of 202
 
The Ring programming language version 1.5.3 book - Part 80 of 184
The Ring programming language version 1.5.3 book - Part 80 of 184The Ring programming language version 1.5.3 book - Part 80 of 184
The Ring programming language version 1.5.3 book - Part 80 of 184
 
The Ring programming language version 1.2 book - Part 45 of 84
The Ring programming language version 1.2 book - Part 45 of 84The Ring programming language version 1.2 book - Part 45 of 84
The Ring programming language version 1.2 book - Part 45 of 84
 
The Ring programming language version 1.7 book - Part 65 of 196
The Ring programming language version 1.7 book - Part 65 of 196The Ring programming language version 1.7 book - Part 65 of 196
The Ring programming language version 1.7 book - Part 65 of 196
 
The Ring programming language version 1.4.1 book - Part 17 of 31
The Ring programming language version 1.4.1 book - Part 17 of 31The Ring programming language version 1.4.1 book - Part 17 of 31
The Ring programming language version 1.4.1 book - Part 17 of 31
 
05 - Qt External Interaction and Graphics
05 - Qt External Interaction and Graphics05 - Qt External Interaction and Graphics
05 - Qt External Interaction and Graphics
 
Google Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinGoogle Fit, Android Wear & Xamarin
Google Fit, Android Wear & Xamarin
 
Treinamento Qt básico - aula II
Treinamento Qt básico - aula IITreinamento Qt básico - aula II
Treinamento Qt básico - aula II
 
The Ring programming language version 1.10 book - Part 82 of 212
The Ring programming language version 1.10 book - Part 82 of 212The Ring programming language version 1.10 book - Part 82 of 212
The Ring programming language version 1.10 book - Part 82 of 212
 
Java agents are watching your ByteCode
Java agents are watching your ByteCodeJava agents are watching your ByteCode
Java agents are watching your ByteCode
 
The Ring programming language version 1.5.4 book - Part 64 of 185
The Ring programming language version 1.5.4 book - Part 64 of 185The Ring programming language version 1.5.4 book - Part 64 of 185
The Ring programming language version 1.5.4 book - Part 64 of 185
 

Plus de William Lee

Study of Chromium OS
Study of Chromium OSStudy of Chromium OS
Study of Chromium OS
William Lee
 
GNOME GeoClue - The Geolocation Service in Gnome
GNOME GeoClue - The Geolocation Service in GnomeGNOME GeoClue - The Geolocation Service in Gnome
GNOME GeoClue - The Geolocation Service in Gnome
William Lee
 

Plus de William Lee (20)

Usage Note of Qt ODBC Database Access on Linux
Usage Note of Qt ODBC Database Access on LinuxUsage Note of Qt ODBC Database Access on Linux
Usage Note of Qt ODBC Database Access on Linux
 
Usage Note of SWIG for PHP
Usage Note of SWIG for PHPUsage Note of SWIG for PHP
Usage Note of SWIG for PHP
 
Upgrade GCC & Install Qt 5.4 on CentOS 6.5
Upgrade GCC & Install Qt 5.4 on CentOS 6.5 Upgrade GCC & Install Qt 5.4 on CentOS 6.5
Upgrade GCC & Install Qt 5.4 on CentOS 6.5
 
Usage Notes of The Bro 2.2 / 2.3
Usage Notes of The Bro 2.2 / 2.3Usage Notes of The Bro 2.2 / 2.3
Usage Notes of The Bro 2.2 / 2.3
 
Viewing Android Source Files in Eclipse (Chinese)
Viewing Android Source Files in Eclipse  (Chinese)Viewing Android Source Files in Eclipse  (Chinese)
Viewing Android Source Files in Eclipse (Chinese)
 
Usage Note of Microsoft Dependency Walker
Usage Note of Microsoft Dependency WalkerUsage Note of Microsoft Dependency Walker
Usage Note of Microsoft Dependency Walker
 
Usage Note of PlayCap
Usage Note of PlayCapUsage Note of PlayCap
Usage Note of PlayCap
 
Qt4 App - Sliding Window
Qt4 App - Sliding WindowQt4 App - Sliding Window
Qt4 App - Sliding Window
 
GTK+ 2.0 App - Desktop App Chooser
GTK+ 2.0 App - Desktop App ChooserGTK+ 2.0 App - Desktop App Chooser
GTK+ 2.0 App - Desktop App Chooser
 
GTK+ 2.0 App - Icon Chooser
GTK+ 2.0 App - Icon ChooserGTK+ 2.0 App - Icon Chooser
GTK+ 2.0 App - Icon Chooser
 
Note of CGI and ASP
Note of CGI and ASPNote of CGI and ASP
Note of CGI and ASP
 
Moblin2 - Window Manager(Mutter) Plugin
Moblin2 - Window Manager(Mutter) PluginMoblin2 - Window Manager(Mutter) Plugin
Moblin2 - Window Manager(Mutter) Plugin
 
Asterisk (IP-PBX) CDR Log Rotation
Asterisk (IP-PBX) CDR Log RotationAsterisk (IP-PBX) CDR Log Rotation
Asterisk (IP-PBX) CDR Log Rotation
 
L.A.M.P Installation Note --- CentOS 6.5
L.A.M.P Installation Note --- CentOS 6.5L.A.M.P Installation Note --- CentOS 6.5
L.A.M.P Installation Note --- CentOS 6.5
 
C Program Runs on Wrong Target Platform(CPU Architecture)
C Program Runs on Wrong Target Platform(CPU Architecture)C Program Runs on Wrong Target Platform(CPU Architecture)
C Program Runs on Wrong Target Platform(CPU Architecture)
 
Internationalization(i18n) of Web Page
Internationalization(i18n) of Web PageInternationalization(i18n) of Web Page
Internationalization(i18n) of Web Page
 
Notes for SQLite3 Usage
Notes for SQLite3 UsageNotes for SQLite3 Usage
Notes for SQLite3 Usage
 
Cygwin Install How-To (Chinese)
Cygwin Install How-To (Chinese)Cygwin Install How-To (Chinese)
Cygwin Install How-To (Chinese)
 
Study of Chromium OS
Study of Chromium OSStudy of Chromium OS
Study of Chromium OS
 
GNOME GeoClue - The Geolocation Service in Gnome
GNOME GeoClue - The Geolocation Service in GnomeGNOME GeoClue - The Geolocation Service in Gnome
GNOME GeoClue - The Geolocation Service in Gnome
 

Dernier

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Dernier (20)

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 

Qt Animation

  • 1. Qt Animation William.L 2010-05-19 wiliwe@gmail.com
  • 2. Outline What is animation? Timer Timeline Animation Framework State Machine Framework GraphicsView Framework
  • 3. What is animation? A series of pictures, each of which is shown for a fixed period
  • 4. Timer (1/2) Class – QTimer Provides repetitive and single-shot timers Emit the timeout() signal at constant intervals. Usage Create a QTimer Connect its timeout() signal to the appropriate slots Call start() with constant interval(in millisecond) parameter From then on it will emit the timeout() signal at constant intervals. QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(doSomethingWhenTimeout())); timer-start(1000);
  • 5. Timer (2/2) Example Timer-Button A QPushButton moving between two points
  • 6. Timeline (1/3) Class – QTimeLine Introduced in Qt 4.2 Most commonly used to animate a GUI control by calling a slot periodically. Usage Construct a QTimeLine object with duration value in milliseconds The duration describes for how long the animation will run. Set a suitable frame range by calling setFrameRange(). Connect the frameChanged() signal to a suitable slot in the widget you wish to animate. Ex : call setValue() in QProgressBar Finally calling start(), QTimeLine will enter Running state When done, QTimeLine enters NotRunning state, and emits finished().
  • 7. Timeline (2/3) Usage // Construct a 1-second(1000ms) timeline with a frame range of 0 - 100 QTimeLine *timeLine = new QTimeLine (1000, Parent); timeLine-setFrameRange (0, 100); connect ( timeLine, SIGNAL(frameChanged(int)), widget, SLOT(Widget-Slot()) );
  • 8. Timeline (3/3) Other Methods setLoopCount() Holds the number of times the timeline should loop before it's finished. 0 means that the timeline will loop forever. setUpdateInterval() Holds the time in milliseconds between each time QTimeLine updates its current time Default is 40ms (e.g. 25 frames per second) setCurveShape() Holds the shape of the timeline curve (how the timeline’s velocity change) Default is EaseInOutCurve Example Timeline-Progressbar Use timeline to increase the progress of the progress bar.
  • 9. Animation Framework (1/5) Introduced in 4.6 Part of the Kinetic project Makes it easy to animate QObjects, including QWidgets, by allowing Qt properties to be animated. Animations are controlled using Easing Curves and can be grouped together.
  • 10. Animation Framework (2/5) Perform animation of a Qt property (color, size, location, etc.) QPropertyAnimation class Containers for animating animations together QSequentialAnimationGroup class Contains animations are animating in sequence QParallelAnimationGroup class Contains animations are animating in parallel
  • 11. Animation Framework (3/5) Usage Create a widget instance wanted to be animated. Create a QPropertyAnimation instance passed widget instance and the widget’s property name wanted to be animated Set animation duration Set animated widget’s star/end property value through QPropertyAnimation methods, setStartValue() / setEndValue() Call QPropertyAnimation’s start() method to start animating QPropertyAnimation *animation = new QPropertyAnimation(Widget, geometry); animation-setDuration(10000); // 10 seconds animation-setStartValue(QRect(250, 250, 100, 30)); animation-setEndValue(QRect(500, 450, 100, 30)); animation-start();
  • 12. Animation Framework (4/5) Fine Control setKeyValueAt (step, value) Creates a key frame at the given step with the given value. The given step must be in the range 0 to 1. QPropertyAnimation *animation = new QPropertyAnimation(Widget, geometry); animation-setDuration(10000); // 10 seconds animation.setKeyValueAt(0, QRect(250, 250, 100, 30)); animation.setKeyValueAt(0.25, QRect(250, 450, 100, 30)); animation.setKeyValueAt(0.5, QRect(500, 450, 100, 30)); animation.setKeyValueAt(0.75, QRect(500, 250, 100, 30)); animation.setKeyValueAt(1, QRect(250, 250, 100, 30)); animation-start();
  • 13. Animation Framework (5/5) Example AnimFmwk-BounceEasyCurve-ParalSequ Three buttons animating in sequential and parallel animations with easing curve AnimFmwk-SetKeyValue An animating button controlled by setKeyValueAt()
  • 14. Qt State Machine Framework (1/7) Classes – QStateMachine, QState, QFinalState, QSignalTransition For creating and executing state graphs. Provides an API and execution model that can be used to effectively embed the elements and semantics of statecharts in Qt applications. Qt's event system is used to drive the state machines. The animation framework also plugs into the new Qt state machine by allowing an animation to be played when transitions are triggered.
  • 15. Qt State Machine Framework (2/7) Components QStateMachine Manages a set of states and transitions Hierarchical Use the addState() function to add a top-level state(QState) to the state machine. Before the machine can be started, use setInitialState() method to set the initial state Call start() method to start the state machine The started() signal is emitted when the initial state is entered Call stop() to stop the state machine explicitly S1 S1-1 S1-2 S2
  • 16. Qt State Machine Framework (3/7) Components QState Represents a general-purpose state for QStateMachine Can have child states Can have transitions to other states Use addTransition(sender,signal,target-state) method to add a transition, this will return a QSignalTransition object Call addAnimation() of the returned QSignalTransition object and pass a QPropertyAnimation object to create a transition animation QFinalState Represents a final state Used to communicate that a QStateMachine has finished its work finished() signal will be emitted when entering the final state
  • 17. Qt State Machine Framework (4/7) Components QSignalTransition Provides a transition based on a Qt signal.
  • 18. Qt State Machine Framework (5/7)
  • 19. Qt State Machine Framework (6/7) Usage QPushButton button(StateMachine Button); button.show(); QStateMachine machine; QState *state1 = new QState(); state1-assignProperty(button, geometry, QRect(200, 200, 100, 100)); QState *state2 = new QState(); state2-assignProperty(button, geometry, QRect(450, 450, 100, 100)); QFinalState *state3 = new QFinalState(); QSignalTransition *transition1 = state1-addTransition(button, SIGNAL(clicked()), state2); transition1-addAnimation(new QPropertyAnimation(button, geometry)); state2-addTransition(button, SIGNAL(clicked()), state3); machine.addState(state1); machine.addState(state2); machine.addState(state3); QObject::connect(machine, SIGNAL(finished()),QApplication::instance(), SLOT(quit())); machine.setInitialState(state1); machine.start();
  • 20. Qt State Machine Framework (7/7) Example StateMachine-AnimButton A QPushButton moves and changes its states when it is pressed. When reaching final state, the application will quit.
  • 21. GraphicsView Framework (1/8) Introduced in Qt 4.2 Replaced its predecessor, QCanvas Item-based Provides A surface(scene) for managing and interacting with a large number of custom-made 2D graphical items A view widget for visualizing the items, with support for zooming and rotation. Items are varying geometric shapes(rectangle, line, circle, etc.)
  • 22. GraphicsView Framework (2/8) Scene(Canvas) Line item Text item Rectangle item View Vertical Scrollbar Thumb Horizontal Scrollbar Thumb Ellipse item The dash-line rectangle is the visible area to human
  • 23. GraphicsView Framework (3/8) Components The Scene - QGraphicsScene Serves as a container for QGraphicsItem objects Manages a large number of items Propagating events from QGraphicsView to each item Managing item state, such as item selection and focus.
  • 24. GraphicsView Framework (4/8) Components The View - QGraphicsView Provides the view widget To visualize the contents of a scene It is a scroll area Can attach several views to the same scene provide several viewports into the same data set. Receives input events from the keyboard and mouse, and translates these to scene events
  • 25. GraphicsView Framework (5/8) Components The Item – QGraphicsItem The base class for graphical items in a scene Detect mouse events Grab keyboard input focus Drag Drop Grouping Collision detection
  • 26. GraphicsView Framework (6/8) Comparison between GraphicsView framework and Clutter Clutter Stage GraphicsView Framework GraphicsScene The place where visual elements exist (canvas) Visual Element GraphicsItem Actor Represnetation Viewport GraphicsView Gtk_Clutter_Viewport
  • 27. GraphicsView Framework (7/8) Usage Create a QGraphicsScene object Add objects of QGraphicsItem to the QGraphicsScene object using addXXX() method, where “XXX” means the type of graphics item. Create a QGraphicsView object and set the created QGraphicsScene object with the method setScene() Finally, let QGraphicsView object be visible by calling show() method. Or add created QGraphicsView object to a QMainWindow object by calling setCentralWidget()
  • 28. GraphicsView Framework (8/8) Example GrphView-SimpleAnim Shows how scene/view/items work together and an animation that a rectangle graphic item moves and fades out.
  • 29. Example Source Codes Download The example codes for this slide (GitHub). https://github.com/wiliwe/qt-animation-example.git Using Git tool to download: git clone https://github.com/wiliwe/qt-animation-example.git
  • 30. References http://doc.qt.nokia.com/4.6/qtimer.html http://doc.qt.nokia.com/4.6/qtimeline.html http://doc.qt.nokia.com/4.6/qtimeline.html#CurveShape-enum http://doc.qt.nokia.com/4.6/animation-overview.html http://doc.qt.nokia.com/4.6/statemachine-api.html http://doc.qt.nokia.com/4.6/graphicsview.html http://doc.qt.nokia.com/4.6/qgraphicsscene.html http://doc.qt.nokia.com/4.6/qgraphicsitem.html