Qt 5 Alpha

Escrito por Rodrigo Belem em 4 de abril de 2012

Hoje nós lançamos o Alpha do Qt 5, o primeiro grande release desde que o Qt Project foi lançado. Muita gente tem trabalhado duro para fazer este lançamento acontecer. Uma grande quantidade de trabalho e features que entraram neste alfa têm vindo de pessoas que não trabalham para a Nokia. É ótimo ver que o projeto se tornou um lugar onde muitas pessoas se encontram e juntos levam o Qt em frente.

O principal objetivo do lançamento do Qt 5 Alpha é obter feedback que nos ajude a fazer as próximas versões melhores. Para o Alpha focamos em entregar os módulos Qt Essential, que formam a base da funcionalidade que o Qt 5 vai oferecer.

O alfa pode ser baixado de http://qt-project.org/wiki/Qt-5-Alpha . Note que a versão alfa é um release apenas dos fonte e sem binários para baixar, então você precisa compilar os binários por si próprio. As instruções para compilar podem ser encontradas em http://qt-project.org/wiki/Qt-5-Alpha-building-instructions.

Temos até agora cerca de 9 meses de trabalho no Qt 5, seguindo as ideias que descrevi num blog em maio do ano passado. O blog falava sobre alguns dos objetivos que tínhamos para o Qt 5, e eu gostaria de descrever um pouco sobre o que conseguimos.

A Visão

Havia uma visão básica que conduzia muito do trabalho feito no Qt 5:

“Qt 5 deve ser a base para uma nova forma de desenvolver de aplicações. Embora ofereça todo o poder do Qt nativo usando C++, o foco deve ser mudado para um modelo, onde C++ é usado principalmente para implementar uma funcionalidade modular para Qt Quick.”

Eu posso dizer que chegamos bem perto desta visão com o Qt 5.0. Este modelo está funcionando muito bem do lado embarcado onde as UIs feitas em Qt são em tela cheia. No lado do Desktop, lançamos a maior parte das fundações necessárias para este modelo, mas levaremos até o 5,1 ou 5,2 para realmente estar pronto para uso.

Desenvolvimento aberto

Queríamos desenvolver Qt 5 de maneira aberta, com uma forte comunidade em torno dele. Desde o lançamento do qt-project.org , vimos uma comunidade vibrante se formando lá, e muitos dos patches e novos recursos que teremos no Qt 5 são provenientes da comunidade.

Quatro grandes mudanças na arquitetura

Então nós definimos quatro mudanças importantes na arquitetura interna do Qt:

  1. Fazer todos os portes do Qt baseados no Qt Platform Abstraction layer (QPA) – Facilitar o port do Qt para outros gerenciadores de janelas e dispositivos
    Com o QPA mudamos como fundamentalmente o Qt se integra com o gerenciador de janelas do sistema operacional subjacente. O QPA foi introduzido no Qt 4.8 como substituto para QWS/Qt Embedded, mas agora é utilizado exclusivamente para todas as plataformas. Esta mudança causou muito trabalho e nos obrigou a reescrever uma parte muito grande de código específico de plataforma. Mas também nos ajudou a criar uma arquitetura mais limpa, onde o código específico de plataforma é muito bem abstraído. Podemos ver que a nova abstração tornou significativamente mais fácil escrever a integração com novos gerenciadores de janelas, backends sendo escritos para QNX, Android e iOS são a prova disso.
  2. Redesenhar nossa pilha gráfica – Aumentar o desempenho em comparação com o Qt 4, usando Qt Quick e OpenGL (ES) 2.0
    O Qt 5 introduz uma nova arquitetura gráfica para o Qt Quick, usando uma Scenegraph no topo do OpenGL. Isto requer OpenGL (ES) 2,0, no mínimo para funcionar. O QtGui agora contém um conjunto de classes QOpenGL *, que substituem as antigas classes QGL* (ainda disponíveis para compatibilidade). Criamos também uma nova classe QGuiApplication que é mais leve do que a QApplication e uma classe QWindow para gerenciar janelas top level na tela. A pilha baseada em QWidget continua funcionando como no Qt 4.x, baseado na QPainter. O QPainter entretanto tem menos backends menos do que se tinha antes. Ela agora está limitada a rasterização por software (Raster backend) para desenhar na tela, pixmaps e imagens, um backend OpenGL para superfícies GL e um backend para geração de PDF e impressão. Os backends dependentes de plataforma usando X11 ou CoreGraphics não existem mais. Isso nos permite introduzir a nova arquitetura gráfica para longo prazo, mantendo total compatibilidade com o Qt 4.x na parte do QWidget.
  3. Estrutura do repositório modular para maior flexibilidade e para atender a junção de desktop e mobile – adicionar/remover conforme a necessidade os módulos específicos de usuários e uma integração completa da API do Qt mobility
    Este é principalmente um item de organização interna, que não será diretamente visível para os desenvolvedores que usam Qt. Mas a modularização dos repositórios do Qt torna mais fácil para nós mantermos diferentes partes do Qt e uma forma mais independente. Isto se tornará cada vez mais importante agora que o Qt 5 está sendo estabilizado e, uma vez que for liberado o Qt 5.0 começar a manter a compatibilidade binária. A modularização ainda não está totalmente completa, o repositório do qtbase ainda contém muitos módulos que devem ser separados. Portanto, este trabalho provavelmente irá continuar após 5.0 sair. A modularização do Qt também torna muito mais fácil de integrar as contribuições em forma de módulos vindos de terceiros. Ela também é uma resposta a tendência de ter diferentes requisitos em laptops e tablets/celulares especialmente com relação aos aspectos móveis, tais como localização, sensores e etc. No Qt 5 veremos A API do Qt Mobility como parte integrada do Qt – alguns deles como parte do grupo de módulos que são vistos como essenciais para o Qt = “Qt Essentials”. Ao oferecer a abordagem modular, outros módulos podem ser adicionados de forma simples, e hoje já temos certeza de que o Qt5 irá oferecer uma lista mais rica de funcionalidade do que qualquer outras versão anterior do Qt. Note que este release da versão alpha do Qt está focada no Qt Essentials.
  4. Separar todas as funcionalidades relacionadas ao QWidget em sua própria biblioteca
    Ao separar os QWidgets em um repositório separado, garantimos a continuidade dos QWidgets para aqueles que quiserem, mas também um caminho para um modelo onde todas as interfaces são feitas em QML e Qt Quick. Separar toda a funcionalidade beseadas em QWidget em sua própria biblioteca é, portanto, a longo prazo é uma boa medida para atingir uma arquitetura limpa no Qt 5.

O anúncio destas mudanças criaram um monte de feedback, nos já listamos muitas das dúvidas comuns sobre Qt 5 e essas mudanças estruturais anteriormente.

Nova funcionalidade

Além das mudanças de estrutura, o Qt 5 também oferece uma série de novas funcionalidades. Eu gostaria de destacar apenas algumas delas aqui, você pode encontrar uma lista detalhada das descrições em nosso wiki.

  • Qt Core
    Muitos novos recursos foram adicionados ao QtCore. Temos agora a classe QStandardPaths que lhe dá os caminhos padrões para coisas como a mídias e documentos em sua plataforma. Um parser JSON e um formato binário otimizado para JSON estão inclusos. Adicionamos suporte para reconhecimento de Mimetype, tanto em extensão e como no conteúdo do arquivo. Uma nova sintaxe de conexão sinal/slot que é verificada em tempo de compilação foi adicionado e temos, uma completamente nova, engine de expressão regular compatível com Perl. Muitas das nossas estruturas de dados foram reescritas e otimizadas para um melhor desempenho. Nós também adicionamos suporte C++11 onde achamos necessário. Mas o Qt continua a compilar e funcionar com compiladores compatíveis com o C++98.
  • Qt Gui
    Todas as classes baseadas em QWidget removidas para a biblioteca QtWidgets. QtGui ganhou apoio para superfícies top level através da classe QWindow, e agora tem suporte embutido ao OpenGL.
  • Qt Network
    Nós adicionamos suporte para pesquisas de DNS e removemos as classes QHttp e QFtp (elas estão disponíveis de forma standalone para aqueles que precisarem delas). Também tivemos muitas pequenas melhorias.
  • Qt Widgets
    Foi portado para a nova arquitetura QPA e deve funcionar como antes no Qt 4.x.
  • Qt Quick
    O Qt Quick dos tempos do Qt 4.x agora está disponível módulo Qt Quick 1 e continua totalmente compatível. Este módulo está pronto e não será mais desenvolvido. O foco aqui agora são nos novos módulos Qt Quick e Qt QML. No Qt 5 nós separamos em módulos separados as partes gráficas do Qt Quick das linguagens QML e JS. As novas classes JS (QJSEngine e QJSValue) estão agora utilizando a engine V8 do Google por baixo dos panos, dando-nos um desempenho muito melhor no JavaScript. A engine do QML também passou por muitas melhorias de desempenho e algumas melhorias na linguagem. O módulo Qt Quick contém a Scenegraph baseada em OpenGL e todos os itens básicos que são conhecidos do Qt Quick do Qt 4.x. Nós adicionamos suporte a efeitos de sombreamento baseados em GL, partículas e muitas outras coisas. No lado do QML os fonte são praticamente compatíveis, mas quando se escreve itens QML em C++ alguns ajustes são necessárias para o novo scene graph.
  • Qt 3D e Qt Location
    Alguns módulos foram adicionados ao conjunto do Qt Essentials, mais notavelmente o Qt 3D para integrar conteúdo 3D com o Qt e o Qt Location que dá acesso a GPS, mapas e outros serviços baseados em localização.
  • Qt WebKit
    A API C++ do  WebKit não mudou desde o Qt 4.x, mas o Qt Webkit foi atualizado para a versão mais recente do webkit.org nos dando muitas melhorias e melhor conformidade com o HTML 5. A compilação está desativada no Windows para este alfa, fazer um build é bastante complicado neste momento. Estamos trabalhando para reativá-lo e tê-lo totalmente funcional para o beta.

Portando a partir Qt 4.x para o Qt 5

Existe um binário E para uma menor quebra de compatibilidade entre Qt 4.x e Qt 5. Contudo temos trabalhado duro para fazer com que a transição seja fácil e suave do código existente para o Qt 5. Como exemplo temos atualmente o Qt Creator compilando em Qt 4.x e Qt 5 usando a mesma base de código.

Se você quiser experimentar o seu próprio projeto contra Qt 5, você pode encontrar instruções detalhadas de como portar aqui.

Note também que não há necessidade imediata de portar seu aplicativo para Qt 5. O Qt 4.8 ainda será apoiado pela comunidade e empresas como a Digia por algum tempo. Mas acreditamos firmemente que o Qt 5 vai oferecer benefícios suficientes para considerar a migração.

Próximos passos

Como você pode ver um monte de coisas aconteceram desde o trabalho no Qt 5.0 iniciados. Estou muito feliz com o que conseguimos até agora. Agora você pode nos ajudar a finalizar o Qt 5 baixando o alfa, experimentando-o e dando-nos feedback.

Todos os comentários devem ser enviados para a lista de desenvolvimento do Qt (development@qt-project.org, veja também lists.qt-project.org) ou, simplesmente, reporte como bug no nosso sistema de rastreamento de bugs . Todos os patches e correções de bugs são, naturalmente, também muito bem-vindas, por favor envie-os para codereview.qt-project.org.

O alfa é o primeiro passo para a versão final do Qt 5, e o foco a partir de agora será totalmente em “aparar” as questões pendentes para que possamos entregar o Qt 5.0 final para você o mais breve possível.

Houve muitas pessoas envolvidas até este ponto para mencioná-los todos aqui, mas eu gostaria de agradecer a cada um que contribuiu de alguma forma para este release.

Divirtam-se!

Lars

 

Fonte: http://labs.qt.nokia.com/2012/04/03/qt-5-alpha/

Gostou? Então compartilhe:

0 comentários


Qt Games Brasil

Escrito por Daker Pinheiro em 4 de abril de 2012

Desde o dia 27/03/2012 está ocorrendo uma Oficina de Jogos Qt no Centro de Informática, na Universidade Federal de Pernambuco (UFPE), organizada pela Nokia. O objetivo desta oficina é fazer com que os alunos aprendam como desenvolver jogos e aplicações utilizando Qt e saiam do curso com pelo menos um jogo publicado na loja de aplicativos da Nokia. Temos como exemplos de jogos feitos em Qt de sucesso como o Heebo e o Pathwind, além do The Incredible Circus, recordista de downloads, passando da marca dos 600 mil.

Incredible Circus

Como existem várias pessoas interessadas no desenvolvimento de jogos utilizando Qt em todo o Brasil, criamos a lista de discussão QtGamesBR. Essa lista servirá de canal de comunicação sobre o desenvolvimento de jogos em Qt, problemas e dúvidas. Também postaremos as novidades da oficina de jogos na UFPE na lista, então fiquem ligados.

Gostou? Então compartilhe:

1 comentário


Palestras na EST – UEA

on abril 3, 2012

Na última sexta-feira aconteceu em Manaus, na Escola Superior de Tecnologia da Universidade Estadual do Amazonas, um evento com várias palestras sobre desenvolvimento de aplicações utilizando Qt. As palestras foram as seguintes (Clique nos links para baixar o arquivo PDF): Introdução ao Qt Utilizando o recurso da camera dos smartphones da Nokia com Qt Quase-engine: [...]

0 comentários Read the full article →

QML Location API

on março 23, 2012

O uso de localização em aplicações móveis tem crescido conforme o uso de smartphones vem se popularizando, ou seja, é “legal” compartilhar com seus amigos sua localização e inserir lugares bem frequentados ou desconhecidos do restante das pessoas. É nesse cenário que vamos explorar um pouco da API de localização do Qt. Antes de iniciar [...]

0 comentários Read the full article →

Qt Platform Abstraction, Lighthouse para os íntimos

on março 16, 2012

É do conhecimento de muitos que Qt é oficialmente suportado em várias plataformas. Recentemente, graças aos esforços da comunidade, novas plataformas passaram a ser suportadas – ainda de forma não oficial – com destaque para Android e iOS. No post de hoje, faremos uma breve introdução à nova estrutura que tem como objetivo simplificar novos ports de [...]

0 comentários Read the full article →

Threaded OpenGL no 4.8

on março 1, 2012

Este post é uma tradução deste aqui: http://labs.qt.nokia.com/2011/06/03/threaded-opengl-in-4-8/ escrito por Jason Barron. — Se você usou o módulo OpenGL no Qt em algum momento você deve ter tido a vontade de executá-lo como uma thread separada. A implementação básica do OpenGL é por si só (em sua maioria), reentrante, e desta forma não havia nada [...]

0 comentários Read the full article →

Qt 4.8.0!

on dezembro 16, 2011

Ontém foi feito o anúncio da versão 4.8.0! Destaques dessa nova versão de Qt: Qt Platform Abstraction (QPA) QPA é o nome dado à reestruturação feita no módulo QtGui de modo a tornar mais fácil a tarefa de “portar” Qt para diferentes sistemas de janela e dispositivos. Um artigo em Português será publicado aqui em [...]

0 comentários Read the full article →

Offline Storage em QML

on novembro 11, 2011

Muitas aplicações precisam armazenar dados para que os mesmos estejam disponíveis após o término de sua execução. Além da opção de lidarmos diretamente com arquivos, o Qt provê diversas maneiras de guardar informações offline como por exemplo o QSettings caso se deseje armazenar apenas chaves e valores. Também é possível utilizar o módulo Qt SQL [...]

0 comentários Read the full article →

Qt Project foi lançado!

on outubro 21, 2011

Tradução do post de Lars Knoll em http://labs.qt.nokia.com/2011/10/21/the-qt-project-is-live/, Portanto, toda referência feita em primeira pessoa deve ser interpretada como um ponteiro para o autor do texto original. – Estou feliz em anunciar que o Qt Project oficialmente lançado hoje. A partir de hoje, o desenvolvimento de Qt será governado como um verdadeiro projeto open source. Agora [...]

2 comentários Read the full article →

QML + RESTful Web Services

on outubro 7, 2011

RESTful Web Services Web Services é uma forma de comunicação entre dispositivos através da uma rede. Existem diversos padrões de comunicação que utilizam várias tecnologias e outros padrões já existentes na Web para fazer tal comunicação entre processos. Atualmente uma dos padrões mais populares é o Representational State Transfer (REST) que, em linhas gerais, define [...]

2 comentários Read the full article →