Origem do Qt
O nome "QT" foi escolhido porque eles acharam a letra "Q" bonita na
Haavard's Emacs font e o "t" foi adicionado para representar "toolkit"(caixa
de ferramentas) inspirado no "Xt" o X Toolkit. A companhia que Haarvard
havia sugerido foi criada primeiramente com o nome "Quasar
Technologies", depois mudou para "Troll Tech" e hoje em dia "Trolltech".
Em maio de 1995 o Qt teve a sua primeira versão publicada, o Qt 0.90, que
poderia ser usado para desenvolvimento tanto em Linux quanto em
Windows, oferecendo a mesma API para as duas plataformas. O QT opera
sob duas licenças, a licença comercial que é requerida para o
desenvolvimento de softwares comercialmente e a free software edition que
é avaliada para o desenvolvimento de software com o código aberto.
Instalando o QT
libavahi-qt3-1
libqt3-headers
libqt3-mt
qt3-apps-dev
libqt3-mt-dev
qt3-assistantq
qt3-dev-tools
qt3-doc
qt3-examples
- Passo 2 : Agora que temos certeza que os pacotes estão disponíveis para a
instalação, basta executar o seguinte comando:
$ su (para você ficar com as permições de root, pra que seja possível
instalação)
Começando a Diversão!
Hello QT
Vamos começar com o Hello QT, um programa simples que irá mostra na
tela uma janela com "Hello QT - Yeah" escrito dentro dela. Primeiro irei
mostrar o código fonte, depois explicaremos linha por linha e finalmente
veremos como compilar o código.
Hello QT:
Entendendo o código
Na linha 7 é feito com que a (label) que foi criado na linha 6 se torne o
widget principal, para que quando o usuário fechar a janela (clicando no X
da barra de titulo da janela,por exemplo) o programa termine, casa não seja
feito essa ligação, que torna a label a widget principal (main widget) quando
o usuário fechar a janela o programa ainda continuaria rodando
ocultamente. Em qualquer programa em que se deseja que o programa seja
encerrado ao fechar uma janela, essa janela deve ser a widget principal,
caso contrario o programa continuará em execução.
Na linha 8 é feito com que a label se torne visível, pois todos os widgets que
são criados, por padrão, são ocultos, ou seja não são mostrados na tela.
Vamos Compilar!
# qmake -project
#qmake hello.pro
Vendo o Resultado
$./hello
Nesta lição iremos substituir o rótulo (label) por um botão que estará ligado
a um determinado evento, que neste caso terá a função de encerrar o
aplicativo.
Entendendo o código
#include <qfont.h>
Dessa vez nosso botão vai dizer "Quit", o que é exatamente a função dele:
fechar o programa quando clicado.Passamos o parâmetro 0 para dizer que o
botão é a janela primária.
quit.resize( 75, 30 );
Aqui vamos alterar o tamanho do nosso botão. Poderíamos fazer isso com o
QFontMetrics também.
Aqui escolhemos uma nova fonte para o botão, neste caso uma fonte da
família Times com 18 pontos e em negrito.
Vamos dar uma olhada nessa tal de SINAIS e SLOTS (Signal and Slot), que é
necessário para entender o que acontece nesse método.
Sinais e Slots são usados para a comunicação entre objetos Qt. Sempre que
o botão é clicado ele envia um sinal, neste caso um sinal clicked(). Este sinal
significa que o objeto foi clicado e o objeto fica a espera de alguma resposta
referente a essa ação.
Nesta lição vamos falar um pouco sobre Parent Widgets e Child Widgets
(Widgets Pais e Widgets Filhos). Aqui vamos usar um único parent e um
único child para facilitar nosso entendimento.
#include <qvbox.h>
Aqui nós incluimos o header vbox.h, que é a classe de layout que iremos
usar.
QVBox box;
Com esta linha criamos uma caixa (box) em que seu conteúdo será alinhado
verticalmente, ou seja, o QVBox organiza os child widgets em colunas
verticais. Separando-os de acordo com o QWidget::sizePolicy() de cada um
dos child (filhos).
Quando o child é mostrado, ele é colocado dentro dos limites do seu parent.
box.show();
Quando o parent widget é mostrado, com a linha mostrada acima, ele irá
mostrar também todos os seus filhos (children), exceto aqueles que foram
feitos com o parâmetro QWidget::hide().
Nesta lição iremos ver como criar nosso próprio Widget, como controlar o
tamanho e dar nome a ele.
Vamos agora ver o código com o qual iremos trabalho nessa lição:
Entendendo o código
public:
};
Aqui nós criamos a nova classe. Como esta classe descende da classe
QWidget, a nova classe é um widget e dessa maneira, será nossa
mainwindow, ou seja, será nossa janela principal e as outras que iremos
adicinar serão seus filhos (child).
{
setMinimumSize( 200, 120 );
Como esse widget que criamos ainda não sabe lidar com alteração de
tamanho, aqui nós definimos o tamanho máximo e mínimo. Esse "problema"
nós iremos aprender a resolver na próxima lição, onde o usuário poderá
alterar o tamanho do widget.
Aqui vamos criar e chamar o nosso widget filho (child widget) e como o
estamos criando dentro do MyWidget, ele será referenciado como this.
Antes definimos o que irá aparecer escrito no botão (Quit) e depois o nome
do botão (quit).
Note que quit é uma variável local do construtor. MyWidget não mantém
nenhum contrle sobre essa variável, mas o Qt sim e dessa forma ela será
deletada assim que o MyWidget encerrar. É dessa forma que o MyWidget
não precisa de um destrutor.
O setGeometry() faz o mesmo que o resize() da lição anterior.
Como a classe MyWidget não conhece o objeto da aplicação, ele precisa ser
conectado o ponteiro para a aplicação, qApp.
a.setMainWidget( &w );
w.show();
return a.exec();
Aqui nós instaciamos nosso novo filho (child), o coloca para ser o main
Widget e executa a aplicação.
Tente mudar o tamanho do nosso widget e incluir mais botões para ver o
resultado.
Conectando widgets
Entendendo o código
#include <qapplication.h>
#include <qpushbutton.h>
#include <qslider.h>
#include <qlcdnumber.h>
#include <qfont.h>
#include <qvbox.h>
Aqui temos três novos includes que não tinhamos visto antes:
public:
};
slider->setRange( 0, 99 );
slider->setValue( 0 );
Agora vamos usar o signal/slot para conectar nosso slider com o displey de
LCD. Faremos isso colocando como signal o método que altera o valor do
slider (valueChanged(int)), porque este sinal é conectado ao LCD. Como slot
colocamos o display do nosso LCD (display(int)), o qual é chamado quando o
signal é produzido.
Blocos de Widgets
Nesta lição iremos ver como encapsular dois widgets dentro de um novo
componente e pela primeira vez vamos usar um widget criados por nós
como um widget filho (child widget). Veja abaixo como vai ficar nosso
widget.
public:
};
slider->setRange( 0, 99 );
slider->setValue( 0 );
public:
};
O nosso botão, que costumava estar onde aqui temos LCDRange, está
separado para que possamos ter um botão "Quit" e muitos objetos
LCDRange.