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.522 ]

Por: Mateus Moutinho em 17/03/2020


Conectando os Botões



O código desta página será iniciado a partir do arquivo "calculadora2.c" (sim, ignoraremos o arquivo de teste "calculadora3.c"). Então, baixe o arquivo calculadora2.c 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

Conectando os botões às funções

Antes de começarmos a desenvolver nossas funções, devemos conectar todos os botões a elas. A fim de testar se todos os botões estão conectados corretamente, criaremos as funções apenas com um "printf" interno para teste.

Criando as funções com Prints Internos

1. "inseri_numero_na_entrada": a primeira função que iremos criar é a função "inseri_numero_na_entrada", ela receberá um ponteiro "void" que pertence a uma estrutura GTK, então precisaremos passar toda a estrutura como argumento.

Declare a função dessa forma:

void inseri_numero_na_entrada    (GtkButton *botao, gpointer numero){}

E, internamente à função, adicione um "printf" no valor do ponteiro que ela receberá como argumento dessa forma:

printf("%c ",*(char *)numero);

Ficando assim:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
2. "registra_operador": esta função também receberá um ponteiro como argumento, então faremos o mesmo processo ao declarar ela com a seguinte função:

void registra_operador(GtkButton *botao,    gpointer operador){}

E, obviamente, também adicionaremos um "printf" interno a ela do valor do ponteiro operador.

printf("%c ",*(char *)operador);

Ficando assim:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
3. "imprimi_resultado_na_entrada": esta função não tem segredo, como ela não receberá nenhum argumento, basta declarar ela e adicionar um "printf" normal interno, desta forma :

void imprimi_resultado_na_entrada(void){}

printf("igual ");

Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
4. "limpa": a função limpa a mesma coisa, basta declara-la e adicionar um "printf" interno:

void limpa(void){}

printf("limpa ");

Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)

Criando os Caracteres de Argumento

Como duas funções do nosso programa receberão "chars" como argumento, devemos declarar esses vetores dentro da função "main", então logo após o empacotamento via container, declare-os assim:

char numeros[] = "0123456789,", operadores[] = "+-*/";

Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)

Conectando o Sinal de Destruição

Para que nosso programa possa se fechar sozinho, devemos conectar o sinal de destruição (o xizinho da interface) à função "gtk_main_quit", que é responsável por fechar o programa, ficando assim:

g_signal_connect(G_OBJECT(janela), "destroy",G_CALLBACK(gtk_main_quit), NULL);

Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)

Conectando os Botões Numéricos

Agora faremos a conexão dos botões numéricos à função "inseri_numero_na_entrada", passando como argumento o endereço do vetor números (sim, será o ENDEREÇO, então não se esqueça de adicionar o "&" na frente). Ficando assim:

g_signal_connect (botao_de_exemplo,          "clicked", G_CALLBACK     (inseri_numero_na_entrada), &numeros[x]);

Todas as conexões ficam desse jeito:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)

Conectando os Botões Operadores

Assim como nos números, também passaremos um "char" como argumento, então a função ficará assim :

g_signal_connect (botao_de_exemplo,      "clicked", G_CALLBACK  (registra_operador), &operadores[x]);

A conexão dos 4 botões operadores, fica deste jeito:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)

Conectando o Botão Igual

O botão igual não passará nenhum argumento à função "imprimi_resultado_na_entrada", então passamos "NULL" como argumento, ficando assim :

g_signal_connect (botao_igual,    "clicked", G_CALLBACK  (imprimi_resultado_na_entrada), NULL);

Conectando o Botão Limpa

Assim, como o igual, ele também não passará argumentos, ficando assim :

g_signal_connect (botao_limpa,    "clicked", G_CALLBACK  (limpa), NULL);

Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)

Testando Todos os Botões

Compile e execute o código e veja se todas as funções estão conectadas , caso esteja tudo certo, toda vez que clicar em algum botão seu número aparecerá no console.
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
O código desta aula esta anexado como calculadora4.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

Otimização de algoritmos

Linguagem C - Listas Duplamente Encadeadas

Linguagem C - Árvores Binárias

Dicas para aprender programação

Análise dos Métodos de Ordenação usados em Algoritmos Computacionais

  
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