# Qt

Qt (oficialmente pronunciado como a palavra inglesa cute) é um framework multiplataforma para desenvolvimento de interfaces gráficas em C++ criado pela empresa norueguesa Trolltech. Com ele é possível desenvolver aplicativos e bibliotecas uma única vez e compilá-los para diversas plataformas sem que seja necessário alterar o código fonte.
Qt é utilizado largamente no ambiente desktop KDE e na antiga plataforma para dispositivos móveis da Nokia, Maemo (também livre), além do BlackBerry 10 e diversos softwares conhecidos e outros internos por grandes empresas não só da área de tecnologia como Google, HP e Adobe, mas também dos mais variados setores como Disney, DreamWorks SKG, Lucasfilm, Siemens, Volvo, NASA, ESA, Philips, Samsung e Panasonic.
Qt é mantido pelo Qt Project, uma iniciativa de software livre envolvendo desenvolvedores individuais e provenientes de empresas como Nokia, Digia e outras. Antes do lançamento do Qt Project, era desenvolvido pela divisão da Nokia Qt Development Frameworks, da empresa Norueguesa Trolltech, a desenvolvedora original do Qt. Em fevereiro de 2011 a Nokia anunciou sua decisão de abandonar as tecnologias baseadas no Symbian e usar tecnologias da Microsoft em seus aparelhos. Logo após foi anunciado que a Digia, uma empresa finlandesa de softwares corporativos e uma das principais usuárias e colaboradoras do Qt, iria assumir o licenciamento comercial e serviços de suporte do Qt. Em agosto de 2012 um anúncio foi realizado que a Digia iria assumir todo desenvolvimento do Qt já que a Nokia não teria mais qualquer interesse no framework. Antes da aquisição a Nokia já preparava o lançamento do Qt 5, uma versão completamente reestruturada.

## Plataformas

Qt funcionam nas seguintes plataformas:
* Windows – Qt for Microsoft Windows
* Windows CE, Mobile – Qt for Windows CE and Windows Mobile
* Symbian – Qt for the Symbian.
* OS X – Qt for Apple OS X; suportando Cocoa
* X11 – Qt for X Window System (GNU/Linux, FreeBSD, HP-UX, Solaris, AIX, etc.)
* Embedded Linux – Qt for embedded platforms: personal digital assistant, smartphone, etc.
* Maemo, MeeGo – Qt for Maemo
* QNX / BlackBerry 10 - Qt for BlackBerry 10.
* Wayland – Qt for Wayland. Aplicações podem trocar entre X and Wayland em tempo de execução

### Plataformas suportadas pela comunidade

Como o Qt está aberto no Gitorious várias plataformas são suportadas pela comunidade:
* Qt for OpenSolaris – Qt for OpenSolaris
* Qt for Haiku – Qt for Haiku
* Qt for OS/2 – Qt for OS/2 eCS platform
* Qt-iPhone – experimental
* Qt for webOS – experimental
* Qt for Amazon Kindle DX – experimental
* Necessitas – Qt for Android

## Design

Qt usa o C++ padrão com geração de código através do seu Meta Object Compiler, ou moc com várias macros para enriquecer a linguagem. Qt pode ser usado por várias linguagens de programação através de bibliotecas de ligação. Roda nas principais plataformas de desktop, dispositivos móveis e embarcados. Tem suporte à internacionalização. Algumas das características não relacionadas à GUI incluem SQL para acesso a diversos banco de dados, XML, JSON, thread, redes, impressão, PDF, manipulação de imagens como SVG e uma API unificada multiplataforma para manipulação de arquivos, além de diversas estrutura de dados, por isso o Qt é um framework completo para desenvolvimento de aplicações multiplataforma.

### Módulos

* Módulos para desenvolvimento geral
** QtCore – contém classes não relacionadas a GUI, incluindo o laço de eventos e mecanismo de sinal e slot, abstrações independentes da plataforma para Unicode, processos leves, arquivos mapeados, memória compartilhada, expressões regulares, e configuração de aplicação
** QtGui – contém a maioria das classes GUI; incluindo classes para tabelas, árvores e listas de acordo com o Padrão de projeto de software, MVC; também inclui um controlo sofisticado de ecrã 2D capaz de suportar milhares de outros objetos. Na versão 5 muitos dos widgets serão deslocados para outra biblioteca
** QtMultimedia – implementa funcionalidade baixo nível de multimídia
** QtNetwork – contém classes para manipulação de clientes and servidores UDP e TCP; implementando clientes FTP e HTTP, suportando buscas DNS; os eventos de rede são integrados o laço de eventos geral facilitando o desenvolvimento de aplicações de rede
** QtOpenGL – contém classes que suportam OpenGL e reprodução de gráficos 3D
** QtOpenVG – plugin para desenho de OpenVG
** QtPrintSupport - classes para controlo de impressão, PDF, etc
** QtPublishSubscribe - mecanismo simplificado de notificações
** QtScript – mecanismo para script baseado no ECMAScript
** QtScriptTools – componentes adicionais para uso com QtScript
** QtSensors - controlo de sensores de hardware
** QtServiceFramework - criação de execução de serviços
** QtSql – contém classes com suporte a diversos bases de dados livres e proprietárias. Inclui modelos editáveis para utilização com as classes GUI. E inclui ainda uma implementação do SQLite
** QtSvg – contém classes para visualização de arquivos SVG
** QtSystemInfo - para obter informações sobre o dispositivo
** QtWebKit – fornece um mecanismo de reprodução gráfica e interação web baseados no WebKit
** QtXml – implementa SAX e DOM interfaces para o manipulador XML
** QtXmlPatterns – dá suporte a XPath, XQuery, XSLT e validação de XML
** Phonon – API multimídia
** Qt3Support – classes legadas
** Qt Declarative framework declarativo para construir interfaces fluidas em QML
** QtWidgets - classes widgets
* Módulos para uso com ferramentas Qt
** QtDesigner
** QtUiTools
** QtHelp
** QtTest
* Módulos para desenvolvedores Unix
** QtDBus – biblioteca para realizar comunicação entre processos via protocolo D-Bus
* Módulos para desenvolvedores Windows
** QAxContainer – extensão para acessar controles ActiveX e objetos COM
** QAxServer – biblioteca estática que transforma um binário padrão em um servidor COM
A nova versão será Qt 5 e espra ser lançada em agosto de 2012. Essa nova versão marca uma grande mudança produzindo um framework mais modularizado, gráficos acelerados por hardware, QML e JavaScript tendo papel importante. C++ Widgets continuarão suportados mas não serão mais parte central da plataforma. Qt 5 também terá novas funcionalidades, melhoria em performance, rapidez de desenvolvimento e suporte básico ao C++11 mantendo compatibilidade com C++98.

### Uso de renderização nativa da UI

QT é usada para emular o visual nativo das plataformas, onde ocasionalmente leva a algumas leves discrepâncias onde a emulação é imperfeita. Versões recentes usam APIs nativas das diferentes plataformas para selecionar métricas e desenhar parte dos controles e não sofrem tanto dos problemas citados.
Em algumas plataformas (como no MeeGo e KDE) Qt é a API nativa.

### Compilador Metaobject

O compilador metaobject, ou moc, é uma ferramenta que processa fontes de um programa Qt gerando código C++ padrão. Ele interpreta certas macros em um código C++ como anotação de código e as usa para gerar código C++ adicional com Meta Informação sobre as classes usada no programa. Essa meta informação é usada para prover funcionalidades não disponíveis no C++ tais como signais e slots, introspecção de tipos e chamadas de função assíncronas.

### Bindings para outras linguagens

Diversas outras linguagens de programação além do C++ podem usar a Qt através de bibliotecas que conectam a linguagem ao framework. Algumas delas permitem acesso completo a todos os módulos enquanto outras apenas a alguns módulos mais importantes para a programação de uma GUI. Esses bindings são criados pelas comunidades e não são suportados oficialmente pelos desenvolvedores da Qt, embora algumas delas já tenham recebido esse suporte no passado. As principais linguagens com bindings são: Ada, C# e .Net, D, Go, Haskell, Harbour, Java, Lisp, Lua, OCaml, Pascal, Perl, PHP, Python, R, Ruby, Rust, Scheme, Tcl além do QML que é uma linguagem declarativa pertencente ao próprio Qt e o QtScript, uma linguagem baseada no Ecmascript também disponível no framework e suporta por pelas ferramentas oficiais.
Qualquer aplicação pode ser configurada por scripts através do QtScript.

### Programa Olá Mundo
## Ferramentas

* Qt Creator, é uma IDE completa e específica para C++, QtScript e QML para todas as plataformas suportadas
* qmake, que automatiza a geração de Makefiles para desenvolvimento em todas as plataformas suportadas
* Qt Designer
* Qt Assistant
* Qt Linguist
* lupdate
* lrelease
* lconvert
* QVFb
* makeqpf
* uic (User Interface Compiler)
* rcc (Resource Compiler)
* qtconfig
* qconfig
* qtdemo
* qt3to4
* qdbusxml2cpp
* D-Bus Viewer
* Qt Visual Studio Add-in
* Qt Eclipse Integration
* Qt Simulator
* Nokia Smart Installer for Symbian
* qmlviewer
* Qt Quick

## História

Haavard Nord e Eirik Chambe-Eng (os desenvolvedores originais da Qt e o CEO e Presidente, respectivamente da Trolltech) começaram o desenvolvimento da "Qt" em 1991.
O toolkit foi chamado de Qt porque a letra Q ficava atraente no Emacs, e "t" foi inspirado no Xt, o toolkit X.
As primeiras versões contavam apenas com duas edições: Qt/X11 for Unix e Qt/Windows for Windows. A versão para Windows só estava disponível em licença proprietária, significando que aplicações escritas para o Qt for X11 não poderiam ser portadas para Windows sem a compra de uma licença comercial.
No fim de 2001, a Trolltech lançou a Qt 3.0, adicionando suporte para o Mac OS X. O suporte para o Mac OS X também estava disponível apenas com licença proprietária até Junnho de 2003, quando a Trolltech lançou a Qt 3.2 com suporte ao Mac OS X disponível através de licença GPL.
Em Junho de 2005, a Trolltech lançou a Qt 4.0.
A Nokia adquiriu a Trolltech ASA em 17 de Junnho de 2008 e mudou seu nome inicialmente para Qt Software, e depois para Qt Development Frameworks. Desde então o desenvolvimento da Qt foi focado no suporte para seus dispositivos, usando tecnologias como Symbian S60 platform. Version 1.0 do Nokia Qt SDK foi lançado em 23 de Junho de 2010. O código fonte foi liberado através do Gitorious, para aumentar a adoção e participação da comunidade nas melhorias da Qt.
Em Dezembro de 2012, foi lançada a Qt 5.0.
Em Dezembro de 2020, foi lançada a Qt 6.0.

### Licenciamento

A Qt sempre esteve disponível para licenciamento para aplicações proprietárias. Com o tempo a Qt foi sendo disponibilizada através de licenças livres. Atualmente está disponível sob as licenças:
* GPL 3.0
* LGPL 2.1 (com exceção especial para desenvolvimento de software proprietário)
* Qt Commercial Developer License (software comercial)