Vamos dar um exemplo simples usando o
Eclipse. Então, vamos passo a passo.
Instalação dos pacotes
Primeiro, você vai precisar dos pacotes pra desenvolvimento "libgtkmm-2.4" e "libglademm-2.4". Pesquise estes pacotes no gerenciador de pacotes Synaptic e marque-os para instalação, que eu recomendo que seja total.
Você também vai precisar do compilador GCC, que pode ser obtido pelo Synaptic buscando por "build-essential" e instalando, mas isso também pode ser feito após a instalação do Eclipse.
Depois, pela central de programas do Ubuntu, vamos fazer uma pesquisa na categoria Programação e marcar pra instalar o "Devhelp", que é a nossa referência pro uso das funções do GTK, e o "Glade Interface Designer", que é a ferramenta que usaremos pra desenhar as telas, já que neste modelo que abordamos a parte visual e o código são separados.
No meu caso eu já tinha o Eclipse instalado, mas a instalação oferecida pelo gerenciador é voltada pro Java, e como vamos programar em C++ precisamos do Eclipse CDT. Independente disso, mesmo, ou principalmente, que você ainda não tenha o Eclipse, vamos ao terminal pra instalar os últimos pacotes necessários. Podemos usar dois comandos, assim seguramente instalamos tudo o que falta:
sudo apt-get install eclipse-cdt
$ sudo apt-get install libgtkmm-2.4-1c2a libgtkmm-2.4-dev build-essential
Agora que temos tudo que precisamos vamos ao segundo passo, criando uma tela.
Criando telas
Esse passo é simples, e no velho esquema do arrastar e soltar que conhecemos. Lembre-se das instalações acima, e agora vamos no menu Aplicativos - Programação - Construtor de Interfaces Glade. O programa não tem segredo, logo que abre ele já exibe uma janela de configuração pra tela que vamos criar, basicamente não mudamos nada.
A única coisa que temos que prestar a atenção é em formato do arquivo do projeto, que deve ser marcado a opção "Libglade", pois é o formato que usaremos.
Montar a tela não necessita de explicações avançadas. Monte e salve no formato citado acima, com a extensão ".glade". Basicamente ele gera um arquivo XML com o layout da tela.
Agora vamos criar o projeto C++ e programar no Eclipse. Crie um novo projeto no Eclipse, selecionando a opção Managed Make C++ Project.
Siga pelo assistente, e ao chegar na tela "Select a type of project", marque o tipo de projeto como Executable (GNU) e pode finalizar. No nosso exemplo só usaremos a configuração de Release pra gerar os executáveis, só pra que nossa demonstração seja mais compacta.
Com o projeto criado, vamos configurá-lo associando as bibliotecas que precisamos do Glade e do GTK. Indo no menu Project - Properties, ou pelo menu pop-up de atalho do Project Explorer, que leva ao mesmo lugar, nas propriedades para o nosso projeto, que no exemplo leva o nome de EclipseGtkmmDemo, na categoria C/C++, na aba Tool Settings, temos uma treeview e nela, no nó GCC C++ Compiler, selecionamos Directories e na lista Include paths incluímos o /usr/include/tgkmm-2.4 e o /usr/include/libglademm-2.4.
No mesmo nó selecionamos Miscellaneous e alteramos o valor do campo Other flags para -c -fmessage-length=0 `pkg-config --cflags gtkmm-2.4` `pkg-config --cflags libglademm-2.4` (com crase mesmo, não é aspa simples). Agora, vamos até o nó GCC C++ Linker e também selecionamos o item Miescellaneous dele, alterando o valor do campo Linker flags para `pkg-config --libs gtkmm-2.4` `pkg-config --libs libglademm-2.4`, da mesma forma. Pronto, é só aplicar e dar OK.
Programando
Sem nos apegarmos muito ao mérito da questão da linguagem C++, vamos criar dois arquivos. O primeiro nomeamos no exemplo como "simple.h" e nele fazemos os includes das bibliotecas do Glade e do GTK e também escrevemos as declarações da nossa classe principal.
A extensão .h é de header. O código fonte desse nosso arquivo fica assim:
#ifndef SIMPLE_H
#define SIMPLE_H
#include <gtkmm.h>
#include <libglademm.h>
class Aplicacao
{
//Declaração das variáveis para os componentes visuais
Gtk::Window *janelaPrincipal;
Gtk::ComboBox *combo;
Gtk::Label *etiqueta;
Gtk::Button *botao;
Gtk::MessageDialog *myMsg;
public:
//Método construtor
Aplicacao();
//Declaração das funções associadas aos eventos dos componentes
virtual void mudaTamanho();
virtual void Fechar();
};
#endif
O nosso outro arquivo nomeamos como "demo.cpp" e nele escrevemos os códigos pra rodar o programa, montar a tela a partir daquele XML gerado e programamos os eventos dos componentes.
#include "simple.h"
Aplicacao::Aplicacao()
{
//Carrega a interface a partir do arquivo glade
Glib::RefPtr<Gnome::Glade::Xml> arvoreDeWidgets = Gnome::Glade::Xml::create("telas/winPrincipal.glade");
//Associa os widgets (componentes) às variáveis
arvoreDeWidgets->get_widget("winPrincipal", Aplicacao::janelaPrincipal);
arvoreDeWidgets->get_widget("lblSenha", Aplicacao::etiqueta);
arvoreDeWidgets->get_widget("cmbPrincipal", Aplicacao::combo);
arvoreDeWidgets->get_widget("btnSair", Aplicacao::botao);
//Associa os sinais (eventos) dos componentes às funções que criamos
Aplicacao::combo->signal_changed().connect(sigc::mem_fun(*this, &Aplicacao::mudaTamanho));
Aplicacao::botao->signal_clicked().connect(sigc::mem_fun(*this, &Aplicacao::Fechar));
//Define o valor padrão dentre os itens da combo
Aplicacao::combo->set_active(0);
//Exibe toda interface
Aplicacao::janelaPrincipal->show_all();
Gtk::Main::run(*janelaPrincipal);
}
void Aplicacao::Fechar()
{
//Fecha a aplicação
Gtk::Main::quit();
}
void Aplicacao::mudaTamanho()
{
//Muda texto do label conforme o item selecionado da combo
switch (this->combo->get_active_row_number())
{
case 0:
this->etiqueta->set_markup("<small>Texto item 1.</small>");
break;
case 1:
this->etiqueta->set_markup("Texto item 2.");
break;
case 2:
this->etiqueta->set_markup("<big>Texto item 3.</big>");
break;
default:
break;
}
}
int main(int argc, char* argv[])
{
//Inicia a aplicação
Gtk::Main kit(argc, argv);
Aplicacao aplicacao;
return 0;
}
Como você pode ver, o programa não tem uma determinada funcionalidade, apenas muda a aparência do texto do nosso label. O objetivo mesmo é mostrar como integrar as interfaces criadas com o Glade e o C++. Agora é só compilar e clicar no "play" e conferir o resultado.
Para mais detalhes e a referência completa do GTK, Libglade etc, você pode consultar o Devhelp, que instalamos conforme dito no início. O resto, é aprender C++.