qt-quick-for-designers-1:qt_quick_and_javascript
Table of Contents
Qt Quick and Javascript
- Qt Quick lists elements with properties, and JavaScript allows you to express more complex behavior than static values.
Item { id: label1 x: 80 width: 100 height: 100 Image { source: { if(pressed) { return "img2.png"; } else { return "img1.png"; } } } }
Javascript functions
- You can add a Javascript function anywhere in your Qt Quick file.
- The following defines and uses a function that picks a number and references it in an array of states.
Component.onCompleted
hasn't been covered yet.
- javascript-example.qml
import QtQuick 1.0 Item { id: myItem width: 400 height: 400 property int currentStateNumber: 0 function randomState() { var statesArray = ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']; var randomNumber; do { randomNumber = Math.floor(Math.random()*statesArray.length); } while (randomNumber == currentStateNumber); currentStateNumber = randomNumber; return statesArray[randomNumber]; } Image { source: "images/background.png" } Image { id: spaceship x: -200 y: 50 source: "images/spaceship.png" } Image { id: button source: "images/button.png" anchors.horizontalCenter: myItem.horizontalCenter anchors.bottom: myItem.bottom anchors.bottomMargin: 20 Text { id: label text: "PRESS" color: "white" anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: 6 } MouseArea { anchors.fill: parent onClicked: { myItem.state = randomState(); } } } states: [ State { name: "bottomRight" PropertyChanges { target: spaceship x: 250 y: 200 } }, State { name: "bottomLeft" PropertyChanges { target: spaceship x: 100 y: 200 } }, State { name: "topLeft" PropertyChanges { target: spaceship x: 10 y: 50 } }, State { name: "topRight" PropertyChanges { target: spaceship x: 100 y: 50 } } ] transitions: [ Transition { NumberAnimation { properties: "x,y" duration: 500 easing.type: Easing.OutExpo } }, Transition { from: "" to: "topLeft" SequentialAnimation{ PauseAnimation { duration: 1000 } NumberAnimation { properties: "x,y" duration: 500 easing.type: Easing.OutExpo } } } ] Component.onCompleted:{ myItem.state = "topLeft"; } }
Importing a Javascript file
* If you want to organize your code, you can import a js file to Qt Quick:
- randomFile.js
function randomState() { var statesArray = ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']; var randomNumber; do { randomNumber = Math.floor(Math.random()*statesArray.length); } while (randomNumber == currentStateNumber); currentStateNumber = randomNumber; return statesArray[randomNumber]; }
- importing-javascript.qml
import QtQuick 1.0 import "randomFile.js" as RandomFunction Item { id: myItem width: 400 height: 400 property int currentStateNumber: 0 Image { source: "images/background.png" } Image { id: spaceship x: -200 y: 50 source: "images/spaceship.png" } Image { id: button source: "images/button.png" anchors.horizontalCenter: myItem.horizontalCenter anchors.bottom: myItem.bottom anchors.bottomMargin: 20 Text { id: label text: "PRESS" color: "white" anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: 6 } MouseArea { anchors.fill: parent onClicked: { myItem.state = RandomFunction.randomState(); } } } states: [ State { name: "bottomRight" PropertyChanges { target: spaceship x: 250 y: 200 } }, State { name: "bottomLeft" PropertyChanges { target: spaceship x: 100 y: 200 } }, State { name: "topLeft" PropertyChanges { target: spaceship x: 10 y: 50 } }, State { name: "topRight" PropertyChanges { target: spaceship x: 100 y: 50 } } ] transitions: [ Transition { NumberAnimation { properties: "x,y" duration: 500 easing.type: Easing.OutExpo } }, Transition { from: "" to: "topLeft" SequentialAnimation{ PauseAnimation { duration: 1000 } NumberAnimation { properties: "x,y" duration: 500 easing.type: Easing.OutExpo } } } ] Component.onCompleted:{ myItem.state = "topLeft"; } }
Resources
- All source code is subject to this copyright.
qt-quick-for-designers-1/qt_quick_and_javascript.txt · Last modified: 2013/07/06 22:53 by mithat