[Kde-br] Ajudinha com QML

Lamarque V. Souza lamarque em kde.org
Quinta Maio 24 14:48:46 UTC 2012


Em Thursday 24 May 2012, Tomaz Canabrava escreveu:
> Negos,

	Olá,
 
> Estou pela primeira vez tentando estudar QML de forma séria, e com
> alguns problemas, aparentemente o QML é estático, precisando de ajuda
> de JavaScripts externos ou integração com o C++ para funcionar com um
> pouco de programação.
> O que estou tentando fazer:
> 
> Sistema pequeno de apresentação de Slides, com navegação manual pelo
> teclado.

	Isso será um problem. QML foi feito para touchscreen, o suporte a 
teclado é bem "baixo nível".
 
> O que consegui fazer:
> 
> Criei módulos novos do QML para Botão, Page, Title, então tenho algo
> próximo a isso aqui:

	Tente fazer algo parecido com isso 
 http://doc.qt.nokia.com/4.7-snapshot/declarative-ui-components-tabwidget-
tabwidget-qml.html

	Uma coisa que você irá notar em QML é que você tem que deixá-lo fazer as 
coisas por conta própria, não tente criar código para implementar todos os 
detalhes de uma operação (mudar de página neste caso). Use propriedades e os 
signals on<signal name>Changed  para fazer o que você precisa. Você terá menos 
trabalho assim. QML é um jeito diferente de programar comparado com Qt/C++.

	O que o tabwidget.qml faz é usar um propridade "property int 
currentItem: 0", ao invés de você criar as páginas manualmente como no exemplo 
abaixo você usa um repeater para fazer isso (a propriedade "index" a seguir 
vem do repeater). A propriedade "visible" de cada Page abaixo se torna 
"visible: index == currentItem". Assim você só precisa mudar o currentItem 
para o que você quiser que automaticamente o Page com aquele index ficará 
visível e todos os outros serão escondidos.

> 
> import QtQuick 1.0
> import "controller.js" as Controller
> 
> Rectangle{
>     id: presentation; width: 800; height:600;
>     property QtObject current : p1; // O slide exibido atualmente.
> 
>     Page{ id: p1; Title{ text: "Pagina 1"; } ; visible : true; }
>     Page{ id: p2; Title{ text: "Pagina 2"; } ; visible : false; }
>     Page{ id: p3; Title{ text: "Pagina 3"; } ; visible : false; }
>     Page{ id: p4; Title{ text: "Pagina 4"; } ; visible : false; }
> 
>    Button{
>       text: "→";
>       onClicked : {
>              presentation.current.visible = false;
>              presentation.current = Controller.next();
>             presentation.visible = true;
>      }
>    }
> 
>    Keys.onLeftPressed: {
>              presentation.current.visible = false;
>              presentation.current = Controller.next();
>             presentation.visible = true;
>      }
> }
> 
> E a implementação do Controller.next é:
> 
> var pos = 0;
> function next(){
>      return "p"+pos++;
> }
> 
> 
> Eu sei que está errado, pois eu preciso retornar o ID ao invés de uma
> String, o problema é que não tenho a menor idéia de como fazer isso, e
> nos exemplos que vem com o Qt, me perdi no código, eles passam de algo
> básico pra algo bastante avançado,
> tou perdidinho perdidinho. =(

	Acho que não tem jeito de retornar um id em QML ou transformar um string 
em id.

-- 
Lamarque V. Souza
KDE's Network Management maintainer
http://planetkde.org/pt-br
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <https://mail.kde.org/mailman/private/kde-br/attachments/20120524/18e0ef13/attachment-0001.html>


Mais detalhes sobre a lista de discussão Kde-br