RESOLVIDO - Interface gráfica em C

Iniciado por rafaelmdesouza, 02 de Fevereiro de 2009, 07:47

tópico anterior - próximo tópico

rafaelmdesouza

Pessoal alguém conhece algum tutorial, livro ou algo do gênero que ensine a criar interface gráfica em C? (de preferência no linux)

Darcamo

Ué?
Esqueceu da GTK?
http://www.gtk.org/

Na documentação dela tem tutoriais, incluindo o clássico hello world.

A GTK também tem bindings para diversas outras linguagens caso você resolva mudar. Em geral cada um com sua documentação.

rafaelmdesouza

Já baixei a GTK+ mas não consegui instalá-la. Nem no Windows nem no Linux... Como eu faço isso?

Kamei Hyoga

Acho que sua resposta é o Glade. Com ele você cria sua interface e etc

Darcamo

Instale a gtk pelo gerenciador de pacotes do ubuntu.
Acredito que basta instalar o pacote libgtk2.0-dev e suas dependências.

Para o glade, instale o pacote glade-3.

Depois disso é só seguir a documentação no site da GTK ou algum tutorial que encontre na internet.
Ex: http://zetcode.com/tutorials/gtktutorial/

rafaelmdesouza

Todos os pacotes da GTK que tem no Gerenciador de Pacotes Synaptic já estão instalados... E esse chamado libgtk2.0-dev não tem. Tem o libgtk2.0-0, libgtk2.0-bin, libgtk2.0-cil, libgtk2.0-common. E o pacote glade-3 não tem também. Meu Linux é o Ubuntu 7.10

Eu tentei compilar o seguinte código que achei d exemplo no site da biblioteca:

#include <gtk/gtk.h>

int main( int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(window);

  gtk_main();

  return 0;
}

mas ele diz que o gtk/gtk.h é um arquivo ou diretório inexistente.

Darcamo

Ubuntu 7.10 é um pouco antigo e realmente não deve ter o glade-3, embora tenha possivelmente um glade mais antigo.

Mas a gtk com certeza deve ter. Procura por gtkALGUMACOISA-dev.
Em último caso você pode pegar o fonte da GTK no site e tentar compilar, mas certamente terão dependências e pepinos para resolver.

Não seria possível atualizar sua versão do ubuntu?

Quanto a compilação, como você esta usando bibliotecas externas ao C puro, então não é simplesmente
gcc arquivo.c -o saida
Você tem que informar para o compilador onde os headers da GTK estão, além de informar ao linkador que ele deve linkar seu programa com a GTK.
Isso não é coisa da GTK. Vale para qualquer biblioteca que você use.

Por exemplo, suponha que você use algumas bibliotecas chamadas BILIOTECA_1, BILIOTECA_2, etc.. O comando de compilação seria então algo como
gcc arquivo.c -o saida -I/PATH_DA_BILIOTECA_1 -I/PATH_DA_BILIOTECA_2 ... -lBILIOTECA_1 -lBIBLIOTECA_2 ...
O "-I" indica justamente a pasta onde on .h da biblioteca está, enquanto que o "-l" (L minúsculo) informa ao linkador que ele deve linkar com a biblioteca.

E como saber quais pastas incluir para a GTK e com que linkar o seu programa?
Basta usar o pkg-config.
Com o comando
pkg-config gtk+-2.0 --cflags
você obterá os paths (os "-I"s), enquanto que com o comando
pkg-config gtk+-2.0 --libs
você obterá as libs (os "-l"s).

Também pode combinar as duas coisas para se ter mais praticidade
pkg-config gtk+-2.0 --cflags --libs
Rode esse comando em um terminal acrescente ao comando de compilação obtendo
gcc arquivo.c -o saida RESULTADO_DO_COMANDO_(pkg-config gtk+-2.0 --cflags --libs)

Só que com isso o comando de compilação fica muito grande. Uma maneira ainda mais prática é simplesmente usar o comando abaixo para compilar
gcc arquivo.c -o saida `pkg-config gtk+-2.0 --cflags --libs`

Os sinais de crase fazem a mágica. O linux "rodará o comando dentro das crases em um terminal" e substituirá tudo pelo resultado, o que é estremamente conveniente.
Com o comando acima fui capaz de compilar o exemplo que você mostrou, após ter instalado o pacote libgtk2.0-dev, claro.