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: 2.269 ]

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
Nenhum artigo encontrado.
Leitura recomendada

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

Tutorial SDL

Linguagem C - Árvores Binárias

Linguagem C - Listas Duplamente Encadeadas

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


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts