Introdução a GTK+ em C

Uma breve introdução de como começar a desenvolver interfaces gráficas em C utilizando a biblioteca GTK+.

[ Hits: 84.635 ]

Por: Fábio Hideki Endo em 09/07/2010


Sinais



É normal minha console ficar travada quando eu fecho um programa? Claro que não.

Se você abrir outro terminal e usar um ps, vai ver que o aplicativo continua em execução. Quando fechamos a janela, não quer dizer que encerramos o aplicativo, pelo menos não se não definirmos que é dessa forma que o programa deve se comportar.

Lembra do main loop? Ele continua esperando eventos, apesar de fecharmos a janela.

Se queremos que o programa seja encerrado quando fechamos a janela, precisamos encerrar o main loop, daí então ele vai executar tudo que está depois do gtk_main(); o que no nosso caso é o return 0;.

Edite o arquivo teste.c e acrescente mais uma linha:

#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc, char **argv) {
  GtkWidget *janela;

  gtk_init(&argc, &argv);

  janela=gtk_window_new(GTK_WINDOW_TOPLEVEL);

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

  gtk_widget_show_all(janela);

  gtk_main();

  return 0;
}

A linha que acrescentamos conecta um sinal ao objeto janela. Esse sinal espera que o objeto janela emita um evento do tipo "destroy" e quando isso acontece chama a função gtk_main_quit, e não passa nenhum argumento para essa função(NULL).

Recompile o programa e tente executá-lo novamente.

Agora o programa deve se encerrar quando a janela é fechada. Isso ocorre porque quando a janela é fechada ela emite um sinal "destroy", que faz com que a função gtk_main_quit() seja executada, e essa função encerra o main loop.

Conectar eventos é a maneira que usamos para fazer qualquer coisa em GTK+ (e na maioria das bibliotecas gráficas). Quando um evento ocorre, ele entra na fila do loop de eventos (main loop), que vai executando as funções conectadas a cada evento (se houver alguma função 'conectada' ao evento).

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Primeiro programa... que não faz nada
   3. Agora sim
   4. Sinais
   5. Mais um exemplo
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Funcionamento da memória

Estudo de ponteiros para GNU/Linux

Bibliotecas estáticas c/c++

Criando uma calculadora com o KDevelop

Utilizando a função QSort em C

  
Comentários
[1] Comentário enviado por eltondhiego em 09/07/2010 - 16:18h

Parabéns pelo artigo!! você poderia inclusive dar continuidade, ensinando novos passos ...

A propósito, me explica essa linha: atol(gtk_entry_get_text(GTK_ENTRY(entrada)));
Se eu estiver certo, a função atol transforma o valor contido em "entrada" para double ... e se fosse para um inteiro ou booleano como ficaria?

[2] Comentário enviado por fhendo em 09/07/2010 - 23:15h

Obrigado pelo comentário elton

O atol faz exatamente isso que você comentou. Ele converte para um double uma sequência de caracteres, que no caso dessa linha é a sequência de caracteres retornada pelo gtk_entry_get_text().
Se eu quisesse converter para um int eu usaria atoi(), no caso de ansi C eu não tenho o tipo bool, normalmente eu retornaria 0 ou 1 dentro de um small int. Espero ter ajudado um pouco

Vou tentar escrever mais alguns artigos

[3] Comentário enviado por leandrox em 10/07/2010 - 22:33h

Bom , Ótimo artigo!
Será minha introdução a essa biblioteca tão bem falada...
Valeu!

[4] Comentário enviado por vinipsmaker em 10/07/2010 - 22:55h

finalmente tive tempo de ler o artigo
e gostei dele, ele vai direto ao ponto (a interface gráfica)
eu tinha tentado aprender pelo manual oficial, mas ele exige que você aprenda uma linguagem de programação quase tão exotérica quanto whitespace ( http://en.wikipedia.org/wiki/Whitespace_%28programming_language%29 ), o GObject (como dizem alguns, "se c fosse apropriada para orientação a objetos, ninguém teria criado c++").

parabéns e obrigado pela contribuição

[5] Comentário enviado por gtuxed em 12/07/2010 - 23:28h

GTK com C no início parece meio "seco" demais, eu recomendaria começar com uma linguagem interpretada (tipo lua, python, perl, etc.).Caso você queira algo com mais desempenho ai sim, vamos para o C.

A minha maior dificuldade com GTK na época em que comecei a aprender foi quando tive que criar uma lista, tem umas implementações de estruturas de dados que acostumar a usar, no inicio achei meio estranho pois em shell script fazia meus aplicativos com lista em 2 segundos.No fim acabei deixando um pouco de lado interface gráfica, somente faço quando realmente é necessário, até porque geralmente o que faço é muito simples.

Para aqueles que já entenderam a lógica e querem alguma ferramenta que ajude na montagem da interface, vale a pena dar uma olhada no http://glade.gnome.org.

[6] Comentário enviado por gui.thcarlos em 17/01/2012 - 20:59h

Não sei se foi só comigo, mas no primeiro exemplo do teste.c tenho um erro de não achar o GtkWidget, vendo o segundo exemplo percebi que a linha #include <gtk/gtk.h> substitui a linha #include <stdio.h> do primeiro exemplo. Creio que o primeiro exemplo esteja com esse pequeno problema :D

[7] Comentário enviado por removido em 11/08/2014 - 12:07h

Ótimo artigo, eu uso a Ide Anjuta para desenvolvimento em gtk3.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts