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:
- 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.
- 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.
- 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.
- 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/