Iniciando no QT, parte I
Atendendo a pedidos, resolvi fazer breve artigo mostrando com começar a se aventurar com o QT.
Em apanas 20 linhas, contando com as de espaço (sim, o espaço é seu amigo, nunca o abandone) e os cabeçalhos extras, podemos fazer um “Hello World” gráfico, que já utiliza as principais funcionalidades do framework.
Como eu não tenho como testar em outras plataformas, estou assumindo que a plataforma utilizada é algum *nix, e que as bibliotecas de desenvolvimento do QT já estão instaladas, bem como as ferramentas de compilação padrão. Caso o QT não esteja instalado, é hora de dar uma olhada neste link.
O código fonte completo do exemplo pode ser baixado aqui, mas se preferir fazer tudo na mão, crie um diretório qthello num lugar qualquer e dentro dele um arquivo chamado main.cpp com o seguinte conteúdo:
01 #include <qapplication> 02 #include <qwidget> 03 #include <qpushButton> 04 05 int main( int argc , char** argv ) 06 { 07 QApplication app( argc , argv ); 08 QWidget window; 09 QPushButton button( "Hello World!" , &window ); 10 11 window.resize( 300 , 200 ); 12 button.setGeometry( 100 , 85 , 100 , 30 ); 13 14 QObject::connect( &button , SIGNAL( clicked() ) , &app , SLOT( quit() ) ); 15 16 window.show(); 17 return app.exec(); 19 } 20
Agora acesse através de um terminal o diretório criado e digite qmake -project.
Se tudo estiver instalado direitinho, um arquivo chamado qthello.pro deve ter sido criado. Se não houver nenhum qthello.pro no diretório, então revise os passo anteriores.
Com tudo acertado digite no terminal qmake && make. Isso irá compilar o exemplo e se tudo deu certo, um arquivo executável chamado qthello foi criado.
Execute-o com ./qthello e uma janela com um botão deve aparecer.
Ok, vamos agora à parte divertida: o código fonte.
As três primeiras linhas apenas incluem os cabeçalhos referentes às classes do QT que vamos utilizar.
A linha 7 declara uma aplicação QT e passa pra ela os parâmetros recebidos do shell pelo programa. A classe QApplication gerencia o fluxo principal do programa e suas configurações. Ela contém o loop principal de eventos, onde todos os eventos vindos tanto da interface quanto de outras fontes são processados e despachados. Ela também gerencia a inicialização e finalização do programa entre outras coisinhas.
A linha 8 declara um widget que será o nosso elemento gráfico principal.
A linha 9 declara um botão com o texto “Hello World!” e torna o mesmo um “filho” do nosso widget principal. Isso fará com que o botão apareca dentro do widget principal.
As linhas 11 e 12 configuram os componentes quanto à forma e posicionamento.
A linha 14 mostra uma das principais funcionalidades do framework, o Sistema Sinal-Slot.
Sinais e slots são utilizados para realizar a comunicação entre os objetos. Através desse sistema um objeto pode disparar (emit) um evento (sinal) que pode ser capturado e processado por um (ou mais) objeto(s). Sinais e slots são métodos especiais da classe. Basicamente, a emissão de um sinal é traduzida para a chamada ao slot correspondente através do moc (meta-object compiler), que pré-processa o código fonte antes da compilação. Para cada classe que implementar sinais e slots, é gerado um arquivo chamado moc_nomedaclasse.cpp, que depois é compilado junto com o restante do código. Isso tudo é feito de forma transparente e o programador, em geral, não precisa se preocupar com esses detalhes. Em termos práticos, emitir um sinal signigica que o slot associado a ele através de um connect será chamado de alguma forma, com os mesmos parâmetros passados ao sinal. Maiores informações podem ser conferidas na documentação on-line.
No nosso exemplo, o connect associa o sinal clicked() do objeto botão, com o slot quit() do objeto aplicação. Isso significa que ao clicar no botão, um sinal é disparado e posteriormente capturado pelo objeto aplicação, que o processa e então finaliza.
Na linha 16, chamamos o método show() do widget, para que ele se torne visível.
Na linha 17, finalmente passamos o controle do programa para o QT. O método exec() vai disparar o loop principal e todos os seus mecanismos, e só retornará quando a aplicação terminar, no nosso caso, quando app.quit() for chamado através do sistema sinal-slot.
Este simples “Hello World” pode parecer bobo, mas é suficiente para demonstrar algumas das principais funcionalidades do QT, como o main loop, a criação de objetos gráficos e o uso de sinais e slots.
Num próximo post eu vou mostrar com criar nossos próprios sinais e slots e o uso de temporizadores.
Referências:
QApplication
QWidget
QPushButton
Sinais e Slots
Comments
-
flavio
-
flavio
-
Rodrigo
-
Rodrigo
-
http://euearenata.wordpress.com/2010/06/15/ppc/ PPC « Eu, eu mesmo e Renata

