Programando em Qt
Este artigo vai ensinar o básico da programação de interface gráfica Qt para C++, nada menos que a melhor plataforma de desenvolvimento GUI do mundo Linux.
Parte 3: Exemplo 2
Neste exemplo iremos substituir o rótulo por um simples botão que estará
ligado a um determinado evento, que neste caso terá a função de encerrar o
aplicativo. Um botão é um elemento comum de interface com usuário em toda
plataforma: você clica e algum evento acontece. Em Qt, os botões são
representados pela classe QPushButton, que é uma subclasse de QButton, que
por sua vez é uma subclasse de QWidget, a classe básica de todos os
elementos GUI de Qt.
01 #include <qapplication.h>
02 #include <qpushbutton.h>
03
04 int main(int argc,char **argv)
05 {
06 QApplication program(argc,argv);
07
08 QPushButton quit("Click Here!!!",0);
09 quit.resize(100,30);
10
11 QObject::connect(&quit,SIGNAL(clicked()),&program,SLOT(&quit));
12
13 program.setMainWidget(&quit);
14 quit.show();
15 return program.exec();
16 }
Observando o código você verá que não muita mudança em relação ao exemplo anterior, a não ser o seguinte trecho de código:
QObject::connect(&quit,SIGNAL(clicked()),&program,SLOT(&quit));
Na verdade, este exemplo foi criado apenas para lhe ensinar sobre SINAIS e SLOTS, 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 mais ou menos assim, "Alguém me clicou. Façam alguma coisa.", então outros objetos que pertencem ao programa podem se conectar com o widget para serem avisadas toda vez que o botão for clicado. Isso é feito através de um slot que tem a função de responder a um sinal em particular. Sinais e Slots são conectados através do método QObject::connect(), em que recebe como parâmetros de entrada o objeto que emite o sinal "&quit", o sinal que é emitido "SIGNAL(clicked())", o objeto que recebe o sinal "&program" e o slot onde este sinal é recebido "SLOT(&quit)". Um único sinal pode estar ligado a vários slots, bem como a recíproca é verdadeira de que um único slot pode estar escutando vários sinais.