Guia de Programação em C/GTK 2 - Construindo uma Calculadora Completa

Neste guia, você aprenderá os princípios básicos de GTK, como posicionar os elementos na interface e entender a teoria de sinais. Ao longo do guia, iremos construir uma calculadora completa em C/GTK 2 com botões numéricos, entrada para texto, cálculos com valores flutuantes e negativos, múltiplos operadores e muito mais.

[ Hits: 12.589 ]

Por: Mateus Moutinho em 17/03/2020


Entendendo a Teoria de Sinais GTK



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:
  1. O widget (botão) que vai emitir o sinal;
  2. O tipo de sinal que ele vai capturar;
  3. 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:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)

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:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
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:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
Compile e execute o código, será imprimido a frase que declaramos no "printf" no terminal toda vez que apertamos o botão 0:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
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:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
Compile e execute o código, quando o botão 0 for pressionado, a mensagem "Viva o Linux" será exibida na tela:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
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

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Construindo a Interface - Parte 1: Criando a Janela
   3. Construindo a Interface - Parte 2: Entendendo a estrutura de tabelas
   4. Construindo a Interface - Parte 3: Redigindo o código da interface
   5. Entendendo a Teoria de Sinais GTK
   6. Entendendo o Funcionamento do Programa
   7. Conectando os Botões
   8. Construindo as Funções - Finalizando o Programa
Outros artigos deste autor

DoTheWorld - Biblioteca completa para manipulação de Arquivos e Pastas em C

Leitura recomendada

Linguagem C - Listas Duplamente Encadeadas

Tutorial SDL

Linguagem C - Árvores Binárias

Otimização de algoritmos

Algoritmo... como fazer?

  
Comentários
[1] Comentário enviado por fabio em 17/03/2020 - 00:10h

Ótimo trabalho, parabéns!

[2] Comentário enviado por mateusmoutinho em 17/03/2020 - 01:29h

opa muito obrigado amigo , logo menos publicarei vários conteúdos sobre programação em C e C++

[3] Comentário enviado por hiperjohn em 28/03/2020 - 19:49h

Mateus, gostei muito do tutorial. Parabéns!

Gostaria de sugerir, caso fosse possível, que vc faça um tutorial sobre como utilizar o Glade para criar a interface gráfica.

Obrigado por compartilhar seu conhecimento!

[4] Comentário enviado por mateusmoutinho em 29/03/2020 - 22:00h


[3] Comentário enviado por hiperjohn em 28/03/2020 - 19:49h

Mateus, gostei muito do tutorial. Parabéns!

Gostaria de sugerir, caso fosse possível, que vc faça um tutorial sobre como utilizar o Glade para criar a interface gráfica.

Obrigado por compartilhar seu conhecimento!


Opa amigo , futuramente posso fazer sim , mas se me permite vou dar te dar uma sugestão, o glade é um ótimo facilitador , porém com ele dificilmente você entenderá a essencia de como funciona a lógica por trás do gtk , então recomendo que para começar estude GTK puro, mas sim irei fazer tutoriais usando o glade sim

[5] Comentário enviado por matheusxreis em 23/09/2021 - 00:50h

Ufa! É extremamente difícil de encontrar bom conteúdo sobre na net. Muito feliz de ter encontrado esse guia aqui.

MUITO obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts