Programando no Ubuntu - aplicações gráficas em C++ com Eclipse e Glade

Publicado por Perfil removido em 25/02/2010

[ Hits: 18.284 ]

 


Programando no Ubuntu - aplicações gráficas em C++ com Eclipse e Glade



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++.

Outras dicas deste autor

Ubuntu 6.06 LTS - Problemas com resolução de tela e mouse

Impedindo a restauração de sessão no Firefox para Cyber Café e Lan House

Problemas com o classpath e o driver do MySQL no Java

Instalando o jSMSn no Mandriva One e superior

EBook Linux 101 Hacks - Segunda Edição

Leitura recomendada

Instalando a biblioteca libxml2

Incluindo paths para os seu próprios headers

Sobrecarregamento de operadores

stty: alternativa para echo e noecho

Imprimir na mesma linha em C

  

Comentários
[1] Comentário enviado por landex em 10/06/2010 - 10:25h

Bem legal está dica! Muito boa mesmo hein!!!



Contribuir com comentário