Escolar Documentos
Profissional Documentos
Cultura Documentos
ERCEMAPI 2011
Parte I
.
Agenda
. 1 . 2 . 3
Agenda
. 1 . 2 . 3
Nome: Ricardo Erikson Veras de Sena Rosa Natural de Teresina Tecnlogo em Anlise e Desenvolvimento de Sistemas - IFPI Mestre em Engenharia Eltrica - UFAM Doutorando em Engenharia Eltrica - UFMG reas de atuao:
Linhas e Produto de Software (SPL) Desenvolvimento de Software para Dispositivos Mveis/TV Digital Inteligncia Computacional
Contato
Agenda
. 1 . 2 . 3
Perl da turma
Por que vocs esto aqui? Vocs conhecem HTML, CSS, JavaScript, C++? Vocs j conheciam o framework Qt?
Agenda
. 1 . 2 . 3
O curso
O curso
Parte II
.
Agenda
. 4 . 5 . 6 . 7 . 8 . 9 . 10 Introduo Ambiente de desenvolvimento Propriedades e Tipos de dados Elementos Bsicos Layout Baseado em Pontos de Ancoragem Tratamento de eventos Estado e Transies
Motivao
Os desenvolvedores buscam reduzir o tempo gasto no desenvolvimento de novos aplicativos
Time to shelf Time to payment Tempo de desenvolvimento
Tempo excessivo gasto na criao das UIs . Agravante . APIs diferentes para diferentes plataformas . . O que os desenvolvedores querem? . Rapidez na codicao e prototipagem Desenvolvimento cross-platform .
Motivao
Os desenvolvedores buscam reduzir o tempo gasto no desenvolvimento de novos aplicativos
Time to shelf Time to payment Tempo de desenvolvimento
Tempo excessivo gasto na criao das UIs . Agravante . APIs diferentes para diferentes plataformas . . O que os desenvolvedores querem? . Rapidez na codicao e prototipagem Desenvolvimento cross-platform .
Motivao
Os desenvolvedores buscam reduzir o tempo gasto no desenvolvimento de novos aplicativos
Time to shelf Time to payment Tempo de desenvolvimento
Tempo excessivo gasto na criao das UIs . Agravante . APIs diferentes para diferentes plataformas . . O que os desenvolvedores querem? . Rapidez na codicao e prototipagem Desenvolvimento cross-platform .
Tenho uma ideia super legal e quero desenvolver um prottipo. Como eu sei programar em Symbian C++, vou desenvolver esse prottipo para a plataforma Symbian. Algum tempo depois Minha ideia realmente muito legal, todos gostaram e agora quero disponibiliz-la nas plataformas iOS, Android e MeeGo. E agora?
Tenho uma ideia super legal e quero desenvolver um prottipo. Como eu sei programar em Symbian C++, vou desenvolver esse prottipo para a plataforma Symbian. Algum tempo depois Minha ideia realmente muito legal, todos gostaram e agora quero disponibiliz-la nas plataformas iOS, Android e MeeGo. E agora?
Tenho uma ideia super legal e quero desenvolver um prottipo. Como eu sei programar em Symbian C++, vou desenvolver esse prottipo para a plataforma Symbian. Algum tempo depois Minha ideia realmente muito legal, todos gostaram e agora quero disponibiliz-la nas plataformas iOS, Android e MeeGo. E agora?
Tenho uma ideia super legal e quero desenvolver um prottipo. Como eu sei programar em Symbian C++, vou desenvolver esse prottipo para a plataforma Symbian. Algum tempo depois Minha ideia realmente muito legal, todos gostaram e agora quero disponibiliz-la nas plataformas iOS, Android e MeeGo. E agora?
Qt Meta-objects Language Linguagem declarativa utilizada no kit de desenvolvimento Qt Quick (Qt User Interface Creation Kit) Desenvolvimento cross-platform Os objetos que devem ser apresentados na UI so declarados de maneira rpida e fcil. A lgica da aplicao pode ser escrita totalmente em JavaScript.
Facilita a utilizao do padro MVC (model-view-controller). Exemplo do Anatron. Flexibilidade na criao das UIs.
Elementos de formas, imagens e textos. Estados, transies, animaes, transformaes, efeitos grcos, etc.
Flying Bus1
Jogo relativamente simples QML + JavaScript Aproximadamente 400 linhas de cdigo (incluindo comentrios) Video img/van.png
1 http://developer.qt.nokia.com/wiki/Flying_Bus_Game
Agenda
. 4 . 5 . 6 . 7 . 8 . 9 . 10 Introduo Ambiente de desenvolvimento Propriedades e Tipos de dados Elementos Bsicos Layout Baseado em Pontos de Ancoragem Tratamento de eventos Estado e Transies
Ambiente de Desenvolvimento
QtSDK2 Qt Creator Remote Compiler Qt QML Viewer / QML Runtime Os aplicativos podem ser invocados utilizando cdigo Qt/C++ utilizando a class QDeclarativeView
2 http://qt.nokia.com/downloads
Agenda
. 4 . 5 . 6 . 7 . 8 . 9 . 10 Introduo Ambiente de desenvolvimento Propriedades e Tipos de dados Elementos Bsicos Layout Baseado em Pontos de Ancoragem Tratamento de eventos Estado e Transies
Tipo color bool date font int double real list point rect string url
Descrio Nomes de cores especicadas no padro SVG entre aspas. Os valores tambm podem ser especicados nos formatos #RRGGBB ou #AARRGGBB. Pode assumir os valores true ou false. Data especicada no formato YYYY-MM-DD. Encapsula as propriedades de uma instncia do tipo QFont do Qt. Representa valores inteiros. Possui ponto decimal e seus valores so armazenados com preciso dupla. Representa um nmero real. Representa uma lista de objetos. Representa um ponto atravs das coordenadas x e y. Consiste na representao dos atributos x, y, width e height. Texto livre entre aspas. Representa a localizao de algum recurso, como um arquivo, atravs de seu endereo.
Propriedade do tipo nome-valor: color: blue Objetos QML possuem identicador (id) A propriedade de um objeto acessada por <id>.<propriedade> Binding: quando uma propriedade expressada em funo de outra Denio de novas propriedades
Agenda
. 4 . 5 . 6 . 7 . 8 . 9 . 10 Introduo Ambiente de desenvolvimento Propriedades e Tipos de dados Elementos Bsicos Layout Baseado em Pontos de Ancoragem Tratamento de eventos Estado e Transies
Elementos Bsicos
Tabela: Alguns elementos bsicos disponveis na linguagem QML.
Descrio O elemento mais bsico da linguagem QML. Embora no possua aparncia visual, ele utilizado como base de todos os elementos visuais. utilizado para preenchimento de reas e frequentemente utilizado como base para o posicionamento de outros elementos. Todos os formatos suportados pelo Qt podem ser utilizados no elemento Image, incluindo PNG, JPEG e SVG. utilizado para adicionar texto na UI. Esse elemento possibilita a entrada de texto no aplicativo. um elemento invisvel, frequentemente utilizado em conjunto com elementos visveis, no tratamento de eventos de entrada com o ponteiro do mouse ou toques na tela.
Agenda
. 4 . 5 . 6 . 7 . 8 . 9 . 10 Introduo Ambiente de desenvolvimento Propriedades e Tipos de dados Elementos Bsicos Layout Baseado em Pontos de Ancoragem Tratamento de eventos Estado e Transies
Pontos de ancoragem
Hands on: Implementao de uma top bar e um menu com 3 opes (Contato, Sobre e Sair) utilizando pontos de ancoragem
Agenda
. 4 . 5 . 6 . 7 . 8 . 9 . 10 Introduo Ambiente de desenvolvimento Propriedades e Tipos de dados Elementos Bsicos Layout Baseado em Pontos de Ancoragem Tratamento de eventos Estado e Transies
MouseArea
Hands on: adicionando eventos ao nosso menu com signals and slots
Agenda
. 4 . 5 . 6 . 7 . 8 . 9 . 10 Introduo Ambiente de desenvolvimento Propriedades e Tipos de dados Elementos Bsicos Layout Baseado em Pontos de Ancoragem Tratamento de eventos Estado e Transies
Estados em QML
. O estado de um objeto representado pelos valores atuais das suas propriedades. Estado base: Os elementos State e PropertyChanges
1 2 3 4 5
State { name: pressed when: mouse.pressed PropertyChanges { target: rect; color: red } } Hands on: adicionando estados ao nosso menu
Estados em QML
. O estado de um objeto representado pelos valores atuais das suas propriedades. Estado base: Os elementos State e PropertyChanges
1 2 3 4 5
State { name: pressed when: mouse.pressed PropertyChanges { target: rect; color: red } } Hands on: adicionando estados ao nosso menu
Estados em QML
. O estado de um objeto representado pelos valores atuais das suas propriedades. Estado base: Os elementos State e PropertyChanges
1 2 3 4 5
State { name: pressed when: mouse.pressed PropertyChanges { target: rect; color: red } } Hands on: adicionando estados ao nosso menu
Dene uma animao padro sempre que determinada propriedade de um objeto sofre alteraes Boa prtica: evitar a utilizao do estado base em animaes com Behavior.
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import QtQuick 1.0 Rectangle { width: 500; height: 100 MouseArea { id: mouse; anchors.fill: parent } Rectangle { id: rect; width: 100; height: 100; color: blue Behavior on x { NumberAnimation{duration: 200} } states: [ State { name: EstadoInicial when: !mouse.pressed PropertyChanges { target: rect; x: 0 } }, State { name: EstadoFinal when: mouse.pressed PropertyChanges { target: rect; x: 400 } } ] } }
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import QtQuick 1.0 Rectangle { width: 200; height: 100 Rectangle { id: obj; width: 100; height: 100; color: red } MouseArea { id: mouse; anchors.fill: parent } states: State { name: EstadoFinal; when: mouse.pressed PropertyChanges { target: obj; x: 100; color: green } } transitions: Transition { NumberAnimation { properties: x; duration: 200 } ColorAnimation { duration: 200 } }
Parte III
.
Agenda
. 11 . 12
A linguagem QML fortemente baseada em componentizao Tudo componente Imagine um componente QML como uma caixa preta que interagem com o mundo externo atravs de suas propriedades, sinais, slots e funes Hands on: Criando o componente Button.qml
A linguagem QML fortemente baseada em componentizao Tudo componente Imagine um componente QML como uma caixa preta que interagem com o mundo externo atravs de suas propriedades, sinais, slots e funes Hands on: Criando o componente Button.qml
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
import QtQuick 1.0 Rectangle { id: button anchors.centerIn: parent width: 100; height: 100 radius: 50; color: red signal clicked MouseArea { anchors.fill: button onClicked: { button.clicked() } }
Observe a linha 8
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import QtQuick 1.0 Item { id: mainView; width: 360; height: 640 Component { id: circleComponent Rectangle { id: circle width: 40; height: 40; radius: 40; color: green } } Loader { id: pointer; sourceComponent: circleComponent} MouseArea { anchors.fill: mainView onMousePositionChanged: { var circle = circleComponent.createObject(mainView) circle.x = mouseX - circle.width/2 circle.y = mouseY - circle.height/2 circle.color = blue } } }
Agenda
. 11 . 12
Abordagem bastante utilizada no desenvolvimento de jogos com QML Utilizao dos mtodos createComponent e createObject: createComponent recebe a URL do arquivo QML createObject mtodo pertencente a objetos do tipo Component. Recebe como parmetro a referncia do item que ser o pai e uma srie de pares chave-valor com conguraes das propriedades
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import QtQuick 1.0 Rectangle { id: mainView width: 360 height: 640 function randomColor() { return Qt.rgba(Math.random(),Math.random(), Math.random(), 0.5 + (Math.random())/2) } Component.onCompleted: { var buttonComponent = Qt.createComponent(Button.qml); var buttonObj = buttonComponent.createObject( mainView, {color : randomColor()}); buttonObj.clicked.connect(function() { color = randomColor() }); } }
var newObj = Qt.createQmlObject( import QtQuick 1.0; + Rectangle { color: red; width: 20; height: 20}, parentItem, dynamicSnippet1);
var newObj = Qt.createQmlObject( import QtQuick 1.0; + Rectangle { color: red; width: 20; height: 20}, parentItem, dynamicSnippet1);
Agenda
. 11 . 12
Itens criados dinamicamente podem trazer impactos negativos para a aplicao fortemente recomendado que se tenha um bom gerenciamento dos objetos criados preciso cuidado ao deletar os objetos Utilizao do mtodo destroy
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import QtQuick 1.0 Rectangle { id: mainView; width: 640; height: 360 Component.onCompleted: { var newObject = Qt.createQmlObject( import QtQuick 1.0; + Rectangle { anchors.centerIn: parent; + color: red; width: 200; height: 200; + radius: 20}, mainView, snippetCode1); var newMouseArea = Qt.createQmlObject( import QtQuick 1.0; + MouseArea { anchors.fill: parent;}, newObject, mouseArea1); newMouseArea.clicked.connect(function() { newObject.opacity = 0; newObject.destroy(1000) }); } }
Obrigado!
Contato