[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