NOTA: o código desta página será iniciado a partir do arquivo da aula anterior "calculadora2.c". Caso não esteja com ele, baixe-o e renomeie para "calculadora.c".
Compile com o seguinte comando:
gcc calculadora.c -o calculadora.out `pkg-config --cflags --libs gtk+-2.0`
Execute com:
./calculadora.out
Entendendo a orientação a Eventos
Para entendermos a teoria de sinais GTK, devemos primeiramente entender como o GTK funciona. GTK segue o paradigma de programação orientada a eventos, ou seja, o programa fica eternamente em um estado de espera até que alguma função seja chamada e, se nenhuma função for chamada, ele simplesmente não faz nada. Fica aberto porém, parado para sempre.
Entendendo os botões
Diferentes de outras bibliotecas, botões em GTK não fazem absolutamente nada além de emitir o sinal de "clicado", eles não têm nenhuma funcionalidade, não podem alterar o valor de uma variável, não podem chamar funções, a única coisa que um botão faz em GTK é disparar um sinal toda vez que é pressionado. Botões em GTK são como buzinas de carro, a única coisa que fazem é emitir um barulho, toda vez que são pressionado.
Entendendo as funções Conectoras de Sinais
Neste ponto da leitura, você leitor deve está se perguntando: 'oras, se um programa em GTK não faz nada, a não ser que uma função seja chamada, e se um botão não faz nada além de ficar disparando um sinal toda vez que é clicado, como que esse treco funciona ?'
A resposta para esta pergunta são as funções conectoras de sinais, essas belezinhas tem como papel capturar um sinal emitido por um botão (ou teclado) e chamar uma função quando esse sinal for emitido e, inclusive, podem passar ponteiros como argumento para as funções que elas chamarem, dessa forma podemos fazer vários botões se conectarem a uma única função (veremos isso mais tarde).
A função conectora de sinais que usaremos no nosso programa, será a:
g_signal_connect (botao_de_teste, "clicked", G_CALLBACK (funcao_de_teste), NULL);
Essa função para funcionar precisa de alguns argumentos, sendo eles:
- O widget (botão) que vai emitir o sinal;
- O tipo de sinal que ele vai capturar;
- A função que ela deve chamar quando o botão emitir o sinal.
Onde:
- g_signal_connect é a função conectora;
- botao_de_teste é o widget que emitirá o sinal;
- clicked é o tipo de sinal (clicado);
- G_CALLBACK é a macro responsável por fazer a chamada da função;
- função de teste é a função que será chamada;
- NULL é o argumento que passaremos pra ela ( no caso nenhum).
Repare no gráfico abaixo:
Um Pouco de Prática
Agora que entendemos a teoria de sinais GTK, vamos à prática. Então, baixe o arquivo da aula passada, a "calculadora2.c" e renomeie para: "calculadora.c" (caso esteja fazendo o código no seu editor de texto, ignore esta mensagem)
ATENÇÃO: lembre-se que a função deve estar sempre abaixo dos widgets, caso contrário, ela não poderá alterar o estado do programa.
E logo após a "função main", crie uma função "void" chamada:
void funcao_de_teste(){}
E dentro dessa função, chame a função:
printf("bom dia amiguinhos do viva o linux
");
Ficando assim:
Agora, lá em baixo, após o empacotamento da tabela via container, declare a seguinte função:
g_signal_connect (botao0,"clicked", G_CALLBACK (funcao_de_teste), NULL);
Ficando assim:
Compile e execute o código, será imprimido a frase que declaramos no "printf" no terminal toda vez que apertamos o botão 0:
Parabéns! Você conseguiu conectar um botão a uma função em GTK.
Alterando o Estado do Programa
O mais difícil já foi feito. Agora vamos alterar algo no programa toda vez que o botão 0 for pressionado, para isso, vá até a "função_de_teste" e declare internamente a ela a seguinte função:
gtk_entry_set_text(GTK_ENTRY(entrada),"Viva o
Linux");
Ficando assim:
Compile e execute o código, quando o botão 0 for pressionado, a mensagem "Viva o Linux" será exibida na tela:
Espero que tenha entendido todo o processo de funcionamento da conexão de sinais em GTK, na próxima aula iremos abordar como funcionará a arquitetura do nosso programa e, posteriormente, fazer toda a conexão dos sinais.
O código desta aula esta anexado como
calculadora3.c. Baixe e renomeie para "calculadora.c".
Compile com o seguinte comando:
gcc calculadora.c -o calculadora.out `pkg-config --cflags --libs gtk+-2.0`
Execute com:
./calculadora.out