Um Framework LGPL Multiplataforma Wagner Reck
Jun 28, 2015
Um FrameworkLGPL Multiplataforma
Wagner Reck
Resumo● O que é ● Breve histórico● Principais Módulos e Ferramentas● Novidades por vir
Qt is......a crossplatform application and UI framework
qt.nokia.com/products
...a crossplatform application framework that is widely used for developing application software with graphical user
interface, and also used for developing nonGUI programs such as commandline tools and consoles for servers.
http://en.wikipedia.org/wiki/Qt_(framework)
Que plataformas o Qt roda?● Oficialmente:
Windows (XP,Vista,7, CE), Linux/X11, Mac (Osx), Symbian (S60), Maemo, Meego, Linux embarcado
● Ports pela comunidade: Android, IPhone, Qnx, VxWorks, ReacOS, Haiku, Linux/Wayland, opensolaris, webOS, OS/2... ● Alguns ainda em desenvolvimento
Algumas Caracteristicas● API intuitiva
● Ótima documentação
● Compatibilidade entre versões● Modular● Utiliza renderização nativa● Performace do C++
● bindings para outras linguagens se necessário
Quem usa Qt?
Onde Qt está presente?
Breve Histórico● Primeira versão disponibilizada em 1995,
por Haavard Nord e Eirik Chambe-Eng;● Em 1997 o Qt passa a ser utilizado no
desenvolvimento do KDE e a versão 1.3 é lançada;
● Em 1999, o Qt 2 passa a ser licenciado pela QPL;
Breve Histórico● Em 2000 é lançado o Qtopia (Qt para ambientes
embarcados);
● Neste mesmo, o Qt passa a ser licenciado pela GPL;
● Em 2001 é lançado o Qt3;
● Em 2005 é lançado o Qt4: primeira versão open-source em todas as plataformas;
● Em janeiro de 2008 a Trolltech é comprada pela Nokia.
Breve Histórico● 2009 – Adicionada licença LGPL;
● 2009-2010 – Suporte a S60, Meego e Maemo;
● Versão 1.0 Nokia Qt SDK (Mobilly API + Simulator + Remote compiler);
● Nova ferramenta de desenvolvimento de interfaces – QtQuick;
Qt é Modular● Necessita instalar/prover apenas os
módulos utilizados● Diminuição do espaço utilizado
(dispositivos embarcados)● Modulos: ferramentas e Bibliotecas
Ferramentas● Qmake ● Linguist● Designer● Assistant● QtCreator● Plugin para Eclipse/Visual studio
Módulos
QtCore● Provê suporte básico
● Containers (strings, listas, hash, map)● Internacionalização● Comunição interobjetos● Funções globais: qrand(), qAbs(), qMax()
GUI● Componentes básicos
● QLabel● QLineEdit● QPushButom● QComboBox
● Diferentes layouts● grid, ancora, formulario...
Designer
Gráficos 2D● Classes do Graphics/View divididas
em:● Cenas: Agrega os itens gráficos● Visualizações : Viewport de uma cena
● Suporte a milhares de itens● Suporte a openGL (sem escrever
códigos OpenGL)
Mainwindow
Documentos de Texto Rico● Permite criar documentos de forma
programática● Exportar para
● ODT● PDF● HTML● Imagens (SVG)● Impressora
SQL● Acompanha drivers para os principais
SGBDs● Podem ser mantidas multiplas conexões
abertasQSqlDatabase conn = QSqlDatabase::addDatabase("QSQLITE", "DB")
conn.setDatabaseName("database")
conn.open()
SQL● Exemplo de consulta:
QSqlQuery q (conn);
q.exec (“SELECT * FROM table;”);
while (q.next())
process(q.value(0));
process(q.value(1).toTime());
Threads● 1- Escrever o processamento:
void function (QString filename){ // process file}
● 2 - Prepara os itens a serem processados:QStringList list;list << "file1.txt" << "file2.txt" << ... ;
● 3 - dispara o processo:QtConcurrent::map(list, function);
Multimidia● Para pequenos efeitos
● Qsound/QMovie
● Aplicações multimidia● Phonon● Maior controle sobre a midia● ex. VLC / Amarok
Gestos e Multitoque● Manipulação com gestos
● Zoom● Rolar lista
● Gestos customizados● Gestos para executar ações únicas
XML● 2 tipos (básicos) de parser
● Sax – XML maiores● Dom – XML menores
● Uso de padrões XML● Xquey, Xpath, Validação de schema xml
Animação● Facilita a criação de interfaces fluídas
● Escolha da propriedade a alterar● Definição do valor final e tempo● Escolha da curva de animação
● Execução em sequência ou paralelas
Webkit● Início com Khtml
● Usado em vários navegadores
● No QT● widgets dentro de páginas HTML● Interação com os recursos da aplicação
QtQuick● Permite a criação de interfaces fluidas● Linguagem declarativa para UI (QML)● Pode se comunicar com código Qt já existente● É trasparente para redes
● Não importa se arquivo está no PC ou WWW
Exemplo QML import QtQuick 1.0 Rectangle { width: 200 height: 200 Text { text: "Hello World"
font.pixelSize: 22 anchors.centerIn: parent } }
Exemplo QML Text{ ... font.pixelSize: 22 MouseArea{ id: textMouseArea anchors.fill: parent
} color: textMouseArea.pressed ?
"gold" : "black"; } }
Próxima Versão● “Modularização” dos “módulos”
● Facilita novas contribuições
● Lighthouse● Facilitar o port para outras plataformas
● Open Governance● Tornar público: roadmap, listas, QA
Documentação Qt● qt.nokia.com/developer● qt.nokia.com/doc● revistaqt.blogspot.com● qtcentre.org