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

Publicado por Perfil removido em 25/02/2010

[ Hits: 18.724 ]

 


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

O VOL no Twitter

Como gravar videoaula no Open Broadcaster software

Instalando facilmente pacotes via web - no Mandrake/Mandriva - com urpmi

Filtrando porcarias com o Squid II

Nova versão do sshtrix liberada! Mais uma ferramenta para Brute force

Leitura recomendada

Sites recomendados para estudar linguagem C

Checagem de erro do scanf

Recursão em C

Getchar(); sendo ignorado? Não mais!

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




Patrocínio

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts