Introduc¸ ˜ao `a Programac¸ ˜ao C++ com Qt 4
Antonio Marcio A. Menezesantonio-marcio.menezes@serpro.gov.br
II F ´orum de Tecnologia em Software Livre SERPRO - Regional Porto Alegre
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones
Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
Qt, o que ´e isso?
Qt,muito mais que uma biblioteca, ´e um framework para desen-volvimento multi-plataforma de aplicac¸ ˜oes.
Qt est ´a dispon´ıvel para as seguintes plataformas: Windows. Windows CE. Linux/X11. Linux Embarcado. S60 (Symbian - Em Breve). MacOS X.
Hist ´oria do Qt
O framework Qt comec¸ou a estar dispon´ıvel publicamente a
partir de maio de1995. Foi criado por Haarvard Nord e Eirik
Chambe-Eng, fundadores da empresa Trolltech. Desde seu in´ıcio, Qt foi concebido para ser multiplataforma.
Em marc¸o de 1996, a ag ˆencia espacial europ ´eia se tornou o segundo cliente do Qt. E emsetembro deste ano, foi lanc¸ada a vers ˜ao 1.0do Qt. Ainda neste ano, foi iniciado o projeto KDE, desenvolvido com Qt, porMatthias Ettrich. Mais tarde, em1998, Matthias foi contratado pela Trolltech.
Hist ´oria do Qt
O framework Qt comec¸ou a estar dispon´ıvel publicamente a
partir de maio de1995. Foi criado por Haarvard Nord e Eirik
Chambe-Eng, fundadores da empresa Trolltech. Desde seu in´ıcio, Qt foi concebido para ser multiplataforma.
Em marc¸o de 1996, a ag ˆencia espacial europ ´eia se tornou o
segundo cliente do Qt. E emsetembro deste ano, foi lanc¸ada a
vers ˜ao 1.0do Qt. Ainda neste ano, foi iniciado o projeto KDE,
desenvolvido com Qt, porMatthias Ettrich. Mais tarde, em1998,
Hist ´oria do Qt
Em1999, a vers ˜ao 2.0 do Qt foi liberada. Uma vers ˜ao do Qt
para linux embarcado, por sua vez, foi lanc¸ada em2000.
Em2001, seguiu-se o lanc¸amento davers ˜ao 3.0 do Qt, agora dispon´ıvel para Windows, MacOS X, Unix e Linux (desktop e embarcado).
Em meados de2005, avers ˜ao Qt 4.0tornou-se dispon´ıvel, con-tando com 500 classes e mais de 9000 func¸ ˜oes.
Hist ´oria do Qt
Em1999, a vers ˜ao 2.0 do Qt foi liberada. Uma vers ˜ao do Qt
para linux embarcado, por sua vez, foi lanc¸ada em2000.
Em2001, seguiu-se o lanc¸amento davers ˜ao 3.0 do Qt, agora
dispon´ıvel para Windows, MacOS X, Unix e Linux (desktop e embarcado).
Em meados de2005, avers ˜ao Qt 4.0tornou-se dispon´ıvel, con-tando com 500 classes e mais de 9000 func¸ ˜oes.
Hist ´oria do Qt
Em1999, a vers ˜ao 2.0 do Qt foi liberada. Uma vers ˜ao do Qt
para linux embarcado, por sua vez, foi lanc¸ada em2000.
Em2001, seguiu-se o lanc¸amento davers ˜ao 3.0 do Qt, agora
dispon´ıvel para Windows, MacOS X, Unix e Linux (desktop e embarcado).
Em meados de2005, avers ˜ao Qt 4.0tornou-se dispon´ıvel,
Hist ´oria do Qt
Em2008, a empresa Trolltech foi adquirida pelaNokia. Trolltech
agora ´e chamada de Qt Software. Pouco tempo depois, o Qt
passou a ser lanc¸ado sob as licenc¸as GPL, LGPL e comercial.
Recentemente, al ´em de ser fornecido o framework Qt, a em-presa Qt Software passou a fornecer uma IDE amig ´avel para desenvolvimento de aplicac¸ ˜oes: oQt Creator.
Hist ´oria do Qt
Em2008, a empresa Trolltech foi adquirida pelaNokia. Trolltech
agora ´e chamada de Qt Software. Pouco tempo depois, o Qt
passou a ser lanc¸ado sob as licenc¸as GPL, LGPL e comercial. Recentemente, al ´em de ser fornecido o framework Qt, a em-presa Qt Software passou a fornecer uma IDE amig ´avel para
Por que C++ e Qt?
O que eu ganho em programar com C++ e Qt?
DesenvolvimentoMultiplataforma.
Programac¸ ˜ao C++ mais amig ´avelcom Qt.
Implemente uma vez. Compile em qualquer lugar.
Aplicac¸ ˜oes KDEs ˜ao feitas com Qt.
Criac¸ ˜ao de interfaces gr ´aficaselegantes e amig ´aveis. Utilizac¸ ˜ao de uma APIrica e ´util.
Quem usa Qt?
Em Aplicac¸ ˜oes Desktop
Phoenix, um sistema para controle de agendamento e monitorac¸ ˜ao de v ˆoos, desenvolvido pela DFS (empresa de controle a ´ereo da Alemanha).
VLC, reprodutor de m´ıdia.
Google Earth, para visualizac¸ ˜ao de imagens de sat ´elite e outras informac¸ ˜oes georreferenciadas.
Skype, ferramenta de comunic¸ ˜ao de voz e dados via internet.
Quem usa Qt?
Em Sistemas Embarcados
Porta-retrato digital SPF-105V daSamsung.
V ´arios modelos de celulares daMotorola.
V´ıdeo-fone VP 5500 daPhilips.
Sony mylo, um comunicador pessoal.
Telefone Wi-Fi KX-WP1050 paraSkypedaPanasonic.
Smartphones 3G daZTE.
GPS Naviflash 1020 daBury.
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
O que preciso para comec¸ar?
Conhecer C ou C++
Apesar de ser importante um conhecimento mais avanc¸ado de C++, para quem programa em Java ou outras linguagens orientadas a objetos ´e poss´ıvel apenas estudar as diferenc¸as sint ´aticas para j ´a iniciar o aprendizado.
Estudar atrav ´es de exemplos
A instalac¸ ˜ao do Qt j ´a vem com muitos exemplos de aplicac¸ ˜oes ´uteis. Estes exemplos s ˜ao fornecidos com seus c ´odigos.
Instalar o Qt SDK e consultar outras refer ˆencias
Instalac¸ ˜ao
Na p ´agina http://qt.nokia.com/downloads voc ˆe pode fazer o
download da vers ˜ao LGPL/Free.
Clique em “Download Qt SDK for Linux/X11 32-bit (275
Mb)”.
Com isto, voc ˆe ir ´a obter o arquivo de instalac¸ ˜ao (certifique-se de conceder permiss ˜ao de execuc¸ ˜ao para o mesmo):
qt-sdk-linux-x86-opensource-2009.03.1.bin. ´
E necess ´ario tamb ´em verificar se est ˜ao instalados os seguintes
Instalac¸ ˜ao - Resumo
Ao final, no diret ´orio de instalac¸ ˜ao do Qt SDK, ser ˜ao encontra-dos os seguintes subdiret ´orios:
bin ´e o diret ´orio onde se encontra o execut ´avel do IDE Qt Creator.
libarmazena bibliotecas necess ´arias a execuc¸ ˜ao do Qt
Creator.
qt´e onde se encontra o framework Qt e suas
ferramen-tas. Dentro deste, h ´a outro diret ´oriobinque cont ´em os execut ´aveis do framework.
share ´e apenas um diret ´orio de recursos (doc, ima-gens etc) utilizados pelo Qt Creator.
Fundamentos
Um programa em C++ consiste de um ou mais unidades de
compilac¸ ˜ao. Cada unidade de compilac¸ ˜ao ´e um arquivo texto
de c ´odigo fonte, tipicamente, com uma extens ˜ao.cpp(ou .cc ou
.cxx).
Para uma unidade de compilac¸ ˜ao, o compilador ir ´a gerar um arquivo objetocom a extens ˜ao .obj (no Windows) ou .o(no Unix ou MACOS X). O arquivo objeto ´e umarquivo bin ´ario com o c ´odigo de m ´aquinaespec´ıfico da arquiteturada m ´aquina onde foi gerado.
Fundamentos
Um programa em C++ consiste de um ou mais unidades de
compilac¸ ˜ao. Cada unidade de compilac¸ ˜ao ´e um arquivo texto
de c ´odigo fonte, tipicamente, com uma extens ˜ao.cpp(ou .cc ou
.cxx).
Para uma unidade de compilac¸ ˜ao, o compilador ir ´a gerar um arquivo objetocom a extens ˜ao .obj (no Windows) ou .o(no
Unix ou MACOS X). O arquivo objeto ´e umarquivo bin ´ario com
o c ´odigo de m ´aquinaespec´ıfico da arquiteturada m ´aquina onde
Fundamentos
Um programa em C++ passa por 6 passos
Edic¸ ˜ao(com um programa editor de texto, por exemplo). Pr ´e-processamento (atrav ´es de diretivas s ˜ao realizadas in-clus ˜oes e substituic¸ ˜oes de textos).
Compilac¸ ˜ao(gerac¸ ˜ao do c ´odigo objeto).
Ligac¸ ˜ao(“linking” com o c ´odigo das rotinas referenciadas em bibliotecas).
Carga(carga do programa e bibliotecas na mem ´oria). Execuc¸ ˜ao(sob controle da CPU, uma instruc¸ ˜ao por vez).
Fundamentos
Um programa em C++ passa por 6 passos
Edic¸ ˜ao(com um programa editor de texto, por exemplo).
Pr ´e-processamento (atrav ´es de diretivas s ˜ao realizadas in-clus ˜oes e substituic¸ ˜oes de textos).
Compilac¸ ˜ao(gerac¸ ˜ao do c ´odigo objeto).
Ligac¸ ˜ao(“linking” com o c ´odigo das rotinas referenciadas em bibliotecas).
Carga(carga do programa e bibliotecas na mem ´oria). Execuc¸ ˜ao(sob controle da CPU, uma instruc¸ ˜ao por vez).
Fundamentos
Um programa em C++ passa por 6 passos
Edic¸ ˜ao(com um programa editor de texto, por exemplo).
Pr ´e-processamento (atrav ´es de diretivas s ˜ao realizadas in-clus ˜oes e substituic¸ ˜oes de textos).
Compilac¸ ˜ao(gerac¸ ˜ao do c ´odigo objeto).
Ligac¸ ˜ao(“linking” com o c ´odigo das rotinas referenciadas em bibliotecas).
Carga(carga do programa e bibliotecas na mem ´oria).
Fundamentos
Um programa em C++ passa por 6 passos
Edic¸ ˜ao(com um programa editor de texto, por exemplo).
Pr ´e-processamento (atrav ´es de diretivas s ˜ao realizadas in-clus ˜oes e substituic¸ ˜oes de textos).
Compilac¸ ˜ao(gerac¸ ˜ao do c ´odigo objeto).
Ligac¸ ˜ao(“linking” com o c ´odigo das rotinas referenciadas em bibliotecas).
Carga(carga do programa e bibliotecas na mem ´oria).
Fundamentos
Um programa em C++ passa por 6 passos
Edic¸ ˜ao(com um programa editor de texto, por exemplo).
Pr ´e-processamento (atrav ´es de diretivas s ˜ao realizadas in-clus ˜oes e substituic¸ ˜oes de textos).
Compilac¸ ˜ao(gerac¸ ˜ao do c ´odigo objeto).
Ligac¸ ˜ao(“linking” com o c ´odigo das rotinas referenciadas em bibliotecas).
Carga(carga do programa e bibliotecas na mem ´oria).
Fundamentos
Um programa em C++ passa por 6 passos
Edic¸ ˜ao(com um programa editor de texto, por exemplo).
Pr ´e-processamento (atrav ´es de diretivas s ˜ao realizadas in-clus ˜oes e substituic¸ ˜oes de textos).
Compilac¸ ˜ao(gerac¸ ˜ao do c ´odigo objeto).
Ligac¸ ˜ao(“linking” com o c ´odigo das rotinas referenciadas em bibliotecas).
Carga(carga do programa e bibliotecas na mem ´oria).
M ´odulos do Qt
Os m ´odulos que comp ˜oem, atualmente, o framework Qt s ˜ao:
QtCore, QtGui, QtNetwork, QtOpenGL, QtScript, QtSql, QSvg, QtWebKit, QtXml, QtXmlPatterns, Phonon, Qt3Support, QtTest, QtDBus.
Ferramentas do Qt
O Qt tamb ´em vem acompanhado de um conjunto de ferramen-tas que auxiliam o processo de desenvolvimento.
Qt Designerpara o projeto de telas. Permite testar o projeto de tela sem programar qualquer linha de c ´odigo.
Qt Linguistpara editar arquivos de traduc¸ ˜oes, tornando uma
aplicac¸ ˜ao com suporte a diferentes l´ınguas.
Qt Assistant ´e um guia de consulta r ´apida e sens´ıvel a
con-texto para a API do Qt.
Ferramentas do Qt
O Qt tamb ´em vem acompanhado de um conjunto de ferramen-tas que auxiliam o processo de desenvolvimento.
Qt Designerpara o projeto de telas. Permite testar o projeto de tela sem programar qualquer linha de c ´odigo.
Qt Linguistpara editar arquivos de traduc¸ ˜oes, tornando uma aplicac¸ ˜ao com suporte a diferentes l´ınguas.
Qt Assistant ´e um guia de consulta r ´apida e sens´ıvel a
con-texto para a API do Qt.
Ferramentas do Qt
O Qt tamb ´em vem acompanhado de um conjunto de ferramen-tas que auxiliam o processo de desenvolvimento.
Qt Designerpara o projeto de telas. Permite testar o projeto de tela sem programar qualquer linha de c ´odigo.
Qt Linguistpara editar arquivos de traduc¸ ˜oes, tornando uma aplicac¸ ˜ao com suporte a diferentes l´ınguas.
Qt Assistant ´e um guia de consulta r ´apida e sens´ıvel a con-texto para a API do Qt.
Ferramentas do Qt
O Qt tamb ´em vem acompanhado de um conjunto de ferramen-tas que auxiliam o processo de desenvolvimento.
Qt Designerpara o projeto de telas. Permite testar o projeto de tela sem programar qualquer linha de c ´odigo.
Qt Linguistpara editar arquivos de traduc¸ ˜oes, tornando uma aplicac¸ ˜ao com suporte a diferentes l´ınguas.
Qt Assistant ´e um guia de consulta r ´apida e sens´ıvel a con-texto para a API do Qt.
Minha primeira aplicac¸ ˜ao com Qt
hello.cpp
#include <QApplication> #include <QLabel>
int main(int argc, char *argv[]) {
QApplicationapp(argc, argv);
QLabel*label = newQLabel(QString::fromUtf8(”Ol ´a Qt!”)); label->show();
return app.exec(); }
Minha primeira aplicac¸ ˜ao com Qt
Ap ´os criar um diret ´orio hello, ser ´a inclu´ıdo deste diret ´orio o
arquivo .cpp da minha primeira aplicac¸ ˜ao:hello.cpp
Ao digitar qmake -project, ser ´a criado o arquivo de projeto
hello.pro
qmake hello.pro ir ´a gerar o arquivo Makefile, que orientar ´a a compilac¸ ˜ao do projeto.
Ao digitar make, ser ´a compilado e gerado o execut ´avel da
Minha primeira aplicac¸ ˜ao com Qt
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones
Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Roteiro para a Pr ´atica
Neste treinamento, ser ˜ao exercitadas algumas tarefas comuns no desenvolvimento de um sistema informatizado. Para agilizar o
treinamento, ser ˜ao propostasvers ˜oes incrementaisda aplicac¸ ˜ao
exemplo.
Estas vers ˜oes incrementais poder ˜ao ser enxergadas como
pontos de controle. Quando um aluno concluir a principal
ativi-dade de um ponto de controle, ele poder ´a adotar uma vers ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Roteiro para a Pr ´atica
Vers ˜oes incrementais da aplicac¸ ˜ao
agenda-telefonica1.zip cont ´em o projeto inicial, sem pro-jeto de tela e apenas um arquivo principal de execuc¸ ˜ao da aplicac¸ ˜ao.
agenda-telefonica2.zipcont ´em o layout inicial da tela princi-pal da aplicac¸ ˜ao.
agenda-telefonica3.zip cont ´em a barra de ferramentas da tela principal da aplicac¸ ˜ao com as ac¸ ˜oes b ´asicas e ´ıcones.
agenda-telefonica4.zip cont ´em o recurso de ativar a aplicac¸ ˜ao na ´area de notificac¸ ˜ao.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Roteiro para a Pr ´atica
Vers ˜oes incrementais da aplicac¸ ˜ao
agenda-telefonica5.zipinclui c ´odigo para evitar que mais de uma agenda seja carregada na mem ´oria ao mesmo tempo. S ˜ao criadas as primeiras conex ˜oes entre signals e slots.
agenda-telefonica6.zip cont ´em o primeiro c ´odigo para acesso ao banco de dados e apresentac¸ ˜ao dos dados na janela principal.
agenda-telefonica7.zipinclui o projeto das telas de cadastro de departamentos e de telefones, e o armazenamento em banco de dados.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Roteiro para a Pr ´atica
Vers ˜oes incrementais da aplicac¸ ˜ao
agenda-telefonica8.zip cont ´em a aplicac¸ ˜ao com suas telas traduzidas para o ingl ˆes e tamb ´em o arquivo de traduc¸ ˜ao da aplicac¸ ˜ao para o portugu ˆes.
agenda-telefonica9.zip cont ´em os arquivos necess ´arios da agenda para o instalador da aplicac¸ ˜ao.
agenda-telefonica10.zipinclui o projeto do instalador com a
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Requisitos da Aplicac¸ ˜ao
Requisitos I
Cadapessoacadastrada na agenda dever ´a ser associada a umdepartamentona qual trabalha.
Todo departamento ser ´a identificado por um c ´odigo, uma
siglae umnome. Siglas e nomes dos departamentos ser ˜ao alfanum ´ericos.
O cadastro de cada pessoa e seu telefone de contato poder ´a tamb ´em ser acrescido com a informac¸ ˜ao de um n ´umero de
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Requisitos da Aplicac¸ ˜ao
Requisitos II
Os dados dos cadastros ser ˜ao armazenadoslocalmente, na
m ´aquina onde se executa a agenda.
A janela principal da agenda dever ´a fornecer umabusca
sim-plificada dos telefones pelos crit ´erios: nome (ou parte do nome) da pessoa e o nome do departamento.
Inicialmente, a janela principal mostrar ´a a lista de todos os telefones, ordenados por nome da pessoa.
Dever ´a ser exibido na janela principal tamb ´em umcontador
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Requisitos da Aplicac¸ ˜ao
Requisitos III
Dever ´a existir uma janela debusca avanc¸adaonde poder ˜ao
ser identificadas as pessoas e seus telefones por parte do telefone/ramal ou parte do nome do departamento.
Quando a janela da agenda for fechada, ela dever ´a ficar
ainda ativa, com um ´ıcone na ´area de notificac¸ ˜ao (System
TrayBar). Nesta situac¸ ˜ao, o usu ´ario poder ´a clicar sobre este ´ıcone e solicitar que a janela seja novamente exibida.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Requisitos da Aplicac¸ ˜ao
Requisitos IV
O cadastro dos departamentos ser ´a feito em uma janela,
separadamente. Em outra janela, ser ´a feito o cadastro das pessoas e seus telefones.
N ˜ao poder ´a ser cadastrado mais de um n ´umero de telefone por pessoa.
A empresa que utilizar ´a a agenda de telefones e ramais
de-seja executar este programa em m ´aquinas com Linux ou
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Diagrama ER da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Script de criac¸ ˜ao do banco de dados
create tableDEPARTAMENTOS(
CODIGOINTEGER NOT NULL
PRIMARY KEY AUTOINCREMENT,
NOMEVARCHAR(256) NOT NULL UNIQUE,
SIGLAVARCHAR(30) NULL
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Script de criac¸ ˜ao do banco de dados
create tablePESSOAS(
NOMEVARCHAR(80) NOT NULL PRIMARY KEY,
DEP CODIGOINTEGER NOT NULL
REFERENCES DEPARTAMENTOS(CODIGO) ON DELETE RESTRICT ON UPDATE RESTRICT ON INSERT RESTRICT,
DDDINTEGER,
TELEFONEINTEGER NOT NULL,
RAMALINTEGER
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Exerc´ıcio de Criac¸ ˜ao do Projeto
Exerc´ıcio 01
Objetivo: Aprender como criar um projeto de aplicac¸ ˜ao GUI (janela do tipo QMainWindow) com o Qt Creator.
Tempo Estimado: 5 a 8 min.
Resultado Esperado: Criar todos os arquivos, como os que foram criados na vers ˜ao agenda-telefonica1.zip.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc.
Conectando Signals e Slots Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Widgets
Widgets (Window Gadgets) s ˜ao componentes que possuem uma
representac¸ ˜ao gr ´afica no projeto de telas. Com oQt Designer, o
desenvolvedor pode criar interfaces gr ´aficas de usu ´ario apenas arrastando e soltando v ´arios widgets sobre a janela que est ´a sendo projetada.
´
E poss´ıvel tamb ´em testar o funcionamento “visual” da janela sob temas gr ´aficos diferentes (Plastique, GTK+, Motif, CleanLooks etc).
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Exerc´ıcio com Widgets
Exerc´ıcio 02
Objetivo: Aprender a criar projetos de telas com componentes visuais.
Tempo Estimado: 2 a 5 min.
Resultado Esperado: Adicionar todos os widgets necess ´arios para o projeto da janela principal da Agenda.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Atribuindo textos ao Menu (QMenu)
Ao adicionar itens ao menu principal, automaticamente
ser ˜ao criadasActions que poder ˜ao ser ligadas a m ´etodos
da janela principal. Tamb ´em ´e poss´ıvel definir ´ıcones para as Actions, mas para isso ´e necess ´ario criar um arquivo de recursos.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Actions e Barra de Ferramentas
A partir do painel de actions, ´e poss´ıvel arrastar e soltar actions
sobre abarra de ferramentasda janela principal. Com isto, ser ˜ao
automaticamente criados bot ˜oes na barra de ferramentas que
acionar ˜ao as actions ao serem clicados. Os´ıconesdas actions
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Exerc´ıcio com Layouts
Exerc´ıcio 03
Objetivo: Aprender a definir os layouts de telas com o Qt Creator / Qt Designer.
Tempo Estimado: 8 a 12 min.
Resultado Esperado: Layout b ´asico de widgets na janela principal.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc.
Conectando Signals e Slots
Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
O que s ˜ao signals e slots?
No Qt, umsignal(sinal) ´e emitido quando um evento ocorre.
Exis-tem signals pr ´e-definidos, mas tamb ´em ´e poss´ıvel de definir seus pr ´oprios signals. Um signal pode ser ligado a um m ´etodo. Desta forma, quando o signal for emitido, este m ´etodo ser ´a executado. Nesta ligac¸ ˜ao entre signal e m ´etodo, o m ´etodo ´e oslot.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Exerc´ıcio com Signals
Exerc´ıcio 04
Objetivo: Aprender a conectar signals e slots dos widgets com Qt Designer.
Tempo Estimado: 2 a 5 min.
Resultado Esperado: O click sobre umQPushButton
execu-tar ´a o m ´etodo clean de umQLineEdit. Testar este
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Signals e Slots no Qt Designer
Num painel (ou janela) do Qt Designer, se pode consultar as conex ˜oes j ´a definidas entre sinais e slots.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Conectando signal e slot, programaticamente
Exemplo conectando Signal e Slot
void conectarSignals() {
connect(
ui->pushButton 2, SIGNAL(clicked()), lineEdit, SLOT(clear())
); }
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Mais sobre signals
Um signal tamb ´em podem ser conectado a outro signal.
O mecanismo de conex ˜ao entre signals e slots tamb ´em
pode resolver o problema de refer ˆencia c´ıclica. Por exemplo,
a janela principal pode criar uma outra janela e esperar que interac¸ ˜oes nesta segunda janela determinem mudanc¸as na janela principal.
Este comportamento ir ´a aparecer na aplicac¸ ˜ao exemplo aqui tratada. Quando forem criados, modificados ou exclu´ıdos
departamentos, a ComboBox de Departamento da janela
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Mais sobre signals
Trecho do m ´etodo mostrarCadastroDepartamentos()
void Principal::mostrarCadastroDepartamentos() {
Departamentos*dep = newDepartamentos();
connect(
dep, SIGNAL(departamentosAtualizados()),
this, SLOT(atualizarComboDepartamentos())
); }
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados
Traduzindo a Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
M ´odulo QtSql
O m ´odulo QtSql ´e o que fornece as classes e rotinas necess ´arias para estabelecer conex ˜oes a bancos de dados e execuc¸ ˜ao de
operac¸ ˜oes, em diferentes SGBDs: IBM DB2,Interbase/Firebird,
MySQL,Oracle,PostgreSQL,SQLite,Sybase. ´
E poss´ıvel acessar outros bancos com o driverODBC, al ´em de
tamb ´em existirem plugins para acesso a outras bases de dados (xBase, por exemplo).
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Criando uma conex ˜ao a um banco de dados
bool criarConexao() {
QSqlDatabasebd =QSqlDatabase::addDatabase(“QPSQL”); bd.setHostName(“sgbd.empresa.com.br”);
bd.setDatabaseName(“BdFuncionarios”); bd.setUserName(“usuario”);
bd.setPassword(“senha”); if (! bd.open() ) {
QMessageBox::critical(0,tr(”DB Error”), bd.lastError().text()); return false; }
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Realizando uma consulta no banco
QStringListlistaTelefones;
QSqlQueryconsulta;
consulta.exec(“SELECT TELEFONE FROM PESSOAS”); while (consulta.next()) {
QString telefone = consulta.value(0).toString(); listaTelefones.append(telefone);
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Exerc´ıcio com Banco de Dados
Exerc´ıcio 05
Objetivo: Aprender a executar uma conex ˜ao e uma consulta num banco de dados.
Tempo Estimado: 10 a 20 min.
Resultado Esperado: Implementar o preenchimento da QComboBox de Departamentos na janela Principal. Os da-dos desta ComboBox ser ˜ao obtida-dos atrav ´es de consulta que recupera os nomes dos departamentos existentes no banco de dados.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Exerc´ıcio com Banco de Dados
QStringListPrincipal::getDepartamentos() {
QStringListlista; lista.append(“Todos”);
QSqlQueryquery( “select distinct NOME from DEPARTAMENTOS order by NOME”, bancoDeDados);
while (query.next()) {
lista.append(query.value(0).toString()); }
return lista; }
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Exerc´ıcio com Banco de Dados
void Principal::atualizarComboDepartamentos() {
ui->comboDepartamento->clear();
ui->comboDepartamento->addItems(getDepartamentos());
}
O m ´etodo addItems deQComboBoxrecebe como par ˆametro um
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Atualizando dados em um banco
QSqlQueryoper; oper.prepare(
“insert into DEPART(NOME, SIGLA) values (:NM, :SG)” );
oper.bindValue(“:NM”, “Desenvolvimento e TI”); oper.bindValue(“:SG”, “DTI”);
oper.exec();
QSqlQueryoper2(
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Classes de Modelo Sql
Para quem prefere uma interac¸ ˜ao mais distante da sintaxe SQL, o Qt fornece algumas classes espec´ıficas.
Classes de Modelo Sql
QSqlQueryModel: Um modelo de dados read-only baseado em uma consulta SQL.
QSqlTableModel: Um modelo read-write que trabalha so-mente sobre uma ´unica tabela.
QSqlRelationalTableModel: Uma especializac¸ ˜ao de QSqlTableModel mas com suporte a chaves estrangeiras (relac¸ ˜oes com outras tabelas).
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados
Traduzindo a Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Qt Linguist
A forma mais f ´acil de tornar uma aplicac¸ ˜ao Qt com suporte a outras l´ınguas ´e:
Usar o m ´etodo tr() em todas as QStrings desta aplicac¸ ˜ao.
Este m ´etodo ´e definido emQObject.
Carregar no momento de inicializac¸ ˜ao da aplicac¸ ˜ao um
ar-quivo de traduc¸ ˜ao (.qm), previamente gerado com oQt
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Produzindo um arquivo de traduc¸ ˜ao
Para preparar um arquivo de traduc¸ ˜ao deve-se usar a ferramenta
lupdate, presente no diret ´orio bin do Qt. Esta ferramenta ´e capaz de extrair todos os literais de strings presentes em janelas
criadas com o Qt Designer e tamb ´em encapsuladas por tr()nos
demais arquivos fontes da aplicac¸ ˜ao.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Produzindo um arquivo de traduc¸ ˜ao
Com a criac¸ ˜ao do arquivo fonte de traduc¸ ˜ao (.ts), basta apenas abr´ı-lo com o Qt Linguist. Na primeira janela de di ´alogo, se de-finem as configurac¸ ˜oes das l´ınguas de origem e destino dos tex-tos capturados.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Produzindo um arquivo de traduc¸ ˜ao
OQt Linguist ´e capaz de exibir visualmente a janela ou o c ´odigo fonte no qual se est ´a fazendo a traduc¸ ˜ao de uma string. Para cada string, realiza-se a traduc¸ ˜ao em uma sec¸ ˜ao como esta:
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Produzindo um arquivo de traduc¸ ˜ao
Ap ´os concluir todas as traduc¸ ˜oes das strings, utiliza-se a opc¸ ˜ao
de menu File->Release do Qt Linguist. Com isto, ser ´a gerado
um arquivo de compilac¸ ˜ao (.qm) do projeto de traduc¸ ˜ao. Para
carregar este arquivo no momento de in´ıcio da aplicac¸ ˜ao, pode-se utilizar o pode-seguinte c ´odigo nomain.cpp:
QApplicationa(argc, argv);
QTranslatortradutor;
tradutor.load(“agenda-telefonica.qm”,
QCoreApplication::applicationDirPath()); a.installTranslator(tradutor);
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Agenda
1 Parte Te ´orica
Por que C++ e Qt?
O que preciso para comec¸ar?
2 Pr ´atica - Construc¸ ˜ao de uma Agenda de Telefones Roteiro para a Pr ´atica
Criando o projeto com o Qt Creator
Trabalhando com Widgets, Layouts, Actions Etc. Conectando Signals e Slots
Acesso a Bancos de Dados Traduzindo a Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Implantando uma aplicac¸ ˜ao Qt
Uma aplicac¸ ˜ao Qt (com compilac¸ ˜ao din ˆamica) usualmente ne-cessitar ´a da seguinte estrutura:
Arquivo execut ´avel da aplicac¸ ˜ao.
Arquivos .qm: arquivos de traduc¸ ˜ao.
Arquivos de bibliotecas do Qt: no linux, por exemplo,
ar-quivos libQtCore.so, libQtSql.so, libQtGui.so (caso n ˜ao se
deseje utilizar as bibliotecas fornecidas na distribuic¸ ˜ao linux).
Diret ´orio sqldrivers: com os plugins do Qt de drivers para conex ˜ao a bancos de dados.
Arquivo .sh: shell script que poder ´a configurarvari ´aveis de ambiente tempor ´ariase executar oarquivo execut ´avel.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Implantando uma aplicac¸ ˜ao Qt
No caso da aplicac¸ ˜ao exemplo, Agenda de Telefones:
Arquivo execut ´avel: agenda-telefonica
Arquivos .qm: agenda-telefonica.qm
Arquivos de bibliotecas do Qt: libQtCore.so.4, libQtSql.so.4, libQtGui.so.4, libQtNetwork.so.4
Diret ´orio sqldrivers: com o pluginlibqsqlite.so Arquivo .sh: agenda-telefonica.sh
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Implantando uma aplicac¸ ˜ao Qt
Existem v ´arias formas poss´ıveis de construir um pacote de implantac¸ ˜ao de uma aplicac¸ ˜ao Qt. Algumas delas s ˜ao:
Pacotes .rpm, .deb, .tgz: a criac¸ ˜ao de pacotes espec´ıficos de distribuic¸ ˜oes linux ´e uma das formas mais comuns e tende a transmitir um “qu ˆe” de formalidade no mundo linux.
Pacotes de c ´odigo fonte: tamb ´em s ˜ao muito utilizados, mas exigem um maior conhecimento dos usu ´arios no momento de compilar e decidir onde implantar o software.
Instaladores execut ´aveis: tende a ser a opc¸ ˜ao mais simples para usu ´arios e agrada bastante a quem j ´a est ´a acostumado com instaladores no Windows.
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Implantando uma aplicac¸ ˜ao Qt
Aqui ser ´a tratada a implantac¸ ˜ao a partir de instaladores
exe-cut ´aveis, mais precisamente criados com oinstallJammer. Como um dos aspectos importantes em desenvolver com
Qt ´e a capacidade de desenvolver sistemas
multiplatafor-mas, ´e interessante utilizar uma ferramenta de instalac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Criando o instalador
Ap ´os passar pelas telas do assistente de criac¸ ˜ao de projeto do
InstallJammer, ser ´a exibida a tela com a ´arvore de configurac¸ ˜oes do projeto. Para configurar os ´ıcones da aplicac¸ ˜ao, configure: EmAction Groups→InstallActions :
ProgramShortcut →IconPath:
<%InstallDir%>agenda-telefonica.png
Uninstall Shortcut→IconPath: <%InstallDir%>uninstall.png
Traduzindo a Aplicac¸ ˜ao
Construindo o instalador da Aplicac¸ ˜ao
Criando o instalador
EmAction Groups→FinishActions :
InstallDesktopShortcut →IconPath: <%InstallDir%>agenda-telefonica.png
Install Quick Launch Shortcut→IconPath: <%InstallDir%>agenda-telefonica.png
Resumo do que foi visto
Introduc¸ ˜ao ao Qt.
Como iniciar um projeto de aplicac¸ ˜ao C++ com Qt. Como realizar o projeto de telas com Qt Designer.
Como criar mecanismos de controle atrav ´es de signals e slots. Como trabalhar com banco de dados em uma aplicac¸ ˜ao Qt. Como traduzir uma aplicac¸ ˜ao Qt para outra l´ıngua.
Resumo do que foi visto
Introduc¸ ˜ao ao Qt.
Como iniciar um projeto de aplicac¸ ˜ao C++ com Qt.
Como realizar o projeto de telas com Qt Designer.
Como criar mecanismos de controle atrav ´es de signals e slots. Como trabalhar com banco de dados em uma aplicac¸ ˜ao Qt. Como traduzir uma aplicac¸ ˜ao Qt para outra l´ıngua.
Resumo do que foi visto
Introduc¸ ˜ao ao Qt.
Como iniciar um projeto de aplicac¸ ˜ao C++ com Qt. Como realizar o projeto de telas com Qt Designer.
Como criar mecanismos de controle atrav ´es de signals e slots. Como trabalhar com banco de dados em uma aplicac¸ ˜ao Qt. Como traduzir uma aplicac¸ ˜ao Qt para outra l´ıngua.
Resumo do que foi visto
Introduc¸ ˜ao ao Qt.
Como iniciar um projeto de aplicac¸ ˜ao C++ com Qt. Como realizar o projeto de telas com Qt Designer.
Como criar mecanismos de controle atrav ´es de signals e slots.
Como trabalhar com banco de dados em uma aplicac¸ ˜ao Qt. Como traduzir uma aplicac¸ ˜ao Qt para outra l´ıngua.
Resumo do que foi visto
Introduc¸ ˜ao ao Qt.
Como iniciar um projeto de aplicac¸ ˜ao C++ com Qt. Como realizar o projeto de telas com Qt Designer.
Como criar mecanismos de controle atrav ´es de signals e slots. Como trabalhar com banco de dados em uma aplicac¸ ˜ao Qt.
Como traduzir uma aplicac¸ ˜ao Qt para outra l´ıngua. Como produzir o instalador da aplicac¸ ˜ao.
Resumo do que foi visto
Introduc¸ ˜ao ao Qt.
Como iniciar um projeto de aplicac¸ ˜ao C++ com Qt. Como realizar o projeto de telas com Qt Designer.
Como criar mecanismos de controle atrav ´es de signals e slots. Como trabalhar com banco de dados em uma aplicac¸ ˜ao Qt. Como traduzir uma aplicac¸ ˜ao Qt para outra l´ıngua.
Resumo do que foi visto
Introduc¸ ˜ao ao Qt.
Como iniciar um projeto de aplicac¸ ˜ao C++ com Qt. Como realizar o projeto de telas com Qt Designer.
Como criar mecanismos de controle atrav ´es de signals e slots. Como trabalhar com banco de dados em uma aplicac¸ ˜ao Qt. Como traduzir uma aplicac¸ ˜ao Qt para outra l´ıngua.
Resumo do que foi visto
Introduc¸ ˜ao ao Qt.
Como iniciar um projeto de aplicac¸ ˜ao C++ com Qt. Como realizar o projeto de telas com Qt Designer.
Como criar mecanismos de controle atrav ´es de signals e slots. Como trabalhar com banco de dados em uma aplicac¸ ˜ao Qt. Como traduzir uma aplicac¸ ˜ao Qt para outra l´ıngua.
Refer ˆencias
J. Blanchette and M. Summerfield.
C++ GUI Programming with Qt 4.
Prentice Hall, 2008. Documentac¸ ˜ao do Qt 4.5 http://qt.nokia.com/doc/4.5/index.html P ´agina do InstallJammer http://www.installjammer.com IDE Kevora http://kevora.sourceforge.net