Programaç˜Ao Para GTK/GNOME Com

Programaç˜Ao Para GTK/GNOME Com

Programa¸c˜ao para GTK/GNOME com C++ Andr´eLu´ısGobbi Sanches Grupo de Software Livre do Centro GeNESS Em parceria com PET - Ciˆenciasda Computa¸c˜ao 7 de Outubro de 2003 Conte´udo 1 Programa¸c˜aoC++ para GNU/Linux 6 1.1 Compilando . 6 1.1.1 Uso B´asico . 6 1.1.2 Ligando Bibliotecas . 7 1.1.3 Inclus˜aode Cabe¸calhos . 8 1.2 O Programa pkg-config . 8 1.2.1 Funcionamento do pkg-config . 9 1.3 Otimiza¸c˜aodo Processo de Compila¸c˜ao . 10 1.3.1 Uso do Programa make . 11 2 Desenvolvimento de Interface Gr´afica 14 2.1 Programa¸c˜aoOrientada a Eventos . 14 2.2 O Modelo MVC . 14 2.3 O que ´eo GTK+ . 16 2.4 Arquitetura do GTK+ . 17 2.5 Packing . 18 2.5.1 Nenhuma Caixa . 19 2.5.2 Caixa Horizontal . 19 2.5.3 Caixa Vertical . 20 2.5.4 Tabela . 20 2.5.5 Posicionamento Fixo . 21 2.5.6 Combina¸c˜oes de Caixas . 22 3 A API GTKMM 23 3.1 Primeiro Programa . 23 3.2 Compila¸c˜ao . 24 3.2.1 Automatizando a Compila¸c˜ao . 25 3.3 Tratamento de Sinais . 25 3.3.1 A Biblioteca libsigc ++ . 25 3.4 Gtk::Window . 28 3.5 Componentes B´asicos . 28 3.5.1 Gtk::Label . 28 3.5.2 Gtk::Button . 29 1 CONTEUDO´ 2 3.5.3 Gtk::ToggleButton . 29 3.5.4 Gtk::CheckButton . 30 3.5.5 Gtk::RadioButton . 30 3.5.6 Gtk::Entry . 31 3.5.7 Separadores . 31 3.6 Caixas . 31 3.6.1 Gtk::Container . 31 3.6.2 Gtk::Box . 32 3.6.3 Gtk::Table . 33 3.6.4 Gtk::Fixed . 35 A Bibliotecas GTK+/GNOME 36 Lista de Figuras 1.1 Grafo de dependˆenciasde uma aplica¸c˜ao. 11 2.1 Modelo MVC . 15 2.2 Aplica¸c˜aode Calend´ario . 16 2.3 Arquitetura do Gtk+ . 18 2.4 Nenhuma Caixa . 19 2.5 Caixa Horizontal . 19 2.6 Caixa Vertical . 20 2.7 Organiza¸c˜aoem Tabela . 20 2.8 Exemplo de Uso da Caixa Tabela . 20 2.9 Combina¸c˜aode Caixas Horizontais e Verticais . 21 2.10 Posicionamento Fixo . 21 2.11 Combina¸c˜aode Caixas . 21 3.1 Execu¸c˜aodo primeiro exemplo . 24 3 Lista de Tabelas 3.1 Principais m´etodos de Gtk::Window . 28 3.2 Principais m´etodos de Gtk::Label . 29 3.3 Principais m´etodos e eventos de Gtk::Button . 29 3.4 Principais m´etodos de Gtk::ToogleButton . 30 3.5 Principais m´etodos de Gtk::RadioButton . 30 3.6 Principais m´etodos de Gtk::Entry . 31 3.7 Principais m´etodos de Gtk::Container . 32 3.8 Principais m´etodos de Gtk::Table . 34 3.9 Principais m´etodos de Gtk::Table . 35 4 Listings O arquivo gtkmm–2.0.pc . 10 Exemplo de Makefile . 11 Exemplo de Makefile com pkg–config . 12 Exemplo usando Glib::ustring . 17 Primeiro Programa GTKMM . 23 Makefile para os Exemplos . 25 Exemplo com Tratamento de Sinais . 26 Exemplo de Gtk::Container . 32 Exemplo de Gtk::VBox e Gtk::HBox . 33 Exemplo de Gtk::Table . 34 Exemplo de Gtk::Fixed . 35 5 Cap´ıtulo 1 Programa¸c˜aoC++ para GNU/Linux 1.1 Compilando Existem diversos compiladores para C++ dispon´ıveis na plataforma GNU/Linux. Como exemplo podemos citar o GCC/G++ (GNU Compiler Collection) e o ICC (Intel C++ Compiler c ), entre outros. O GCC ´e provavelmente o mais popular, pois ´eo padr˜aoda maioria das distribui¸c˜oes e o compilador oficial do GNU/Linux. Por essas raz˜oes, foi o compilador escolhido para testar os exemplos. A seguir ser´afeita uma breve demon- stra¸c˜aode como utilizar o GCC para compilar seus programas C++. Todos os exemplos foram testados com este compilador. Entretanto, os exemplos foram escritos em puro c´odigoISO C++, e portanto os exemplos aplicam-se aos demais compiladores. O conjunto de bibliotecas GTK+ possui uma vers˜aopara Windows c , possibilitando o desenvolvimento de c´odigo de f´acil portabilidade. No en- tanto, este texto abranger´aapenas o desenvolvimento para GNU/Linux, por ser seu foco. Para utilizar o Gtk+ no Windows ´enecess´arioobter as bib- liotecas e escolher um compilador, como os distribu´ıdos pela Microsoft e pela Intel. 1.1.1 Uso B´asico Para compilar programas C++ com o GCC, digite: user@host:/home/user$ g++ −o <programa> <programa>.cc Este comando gerar´aum execut´avel chamado <programa>, a partir do arquivo <programa>.cc. Caso o programa a ser compilado esteja dividido em v´arios arquivos, todos devem ser listados: 6 CAP´ITULO 1. PROGRAMAC¸ AO˜ C++ PARA GNU/LINUX 7 user@host:/home/user$ g++ −o <programa> <arquivo1>.cc <arquivo2>.cc <...> Note que independentemente de quantos arquivos sejam usados, todo programa deve ter uma, e apenas uma, fun¸c˜aomain(). Em caso de omiss˜ao,o gcc liga os arquivos-objeto e gera o execut´avel. Caso esse comportamento n˜aoseja desejado, ´eposs´ıvel utilizar a diretiva −c: user@host:/home/user$ gcc −c <arquivo>.cc Com a diretiva −c, o arquivo-objeto <arquivo>.o ser´agerado. O nome do arquivo-objeto pode ser definido com a diretiva −o. 1.1.2 Ligando Bibliotecas A maioria das instala¸c˜oesGNU/Linux oferecem uma vasta cole¸c˜aode bib- liotecas de fun¸c˜oes, que geralmente s˜aoinstaladas como pacotes -dev. Es- tas bibliotecas oferecem praticamente qualquer funcionalidade encontrada em aplica¸c˜oes livres para Windows, como reprodu¸c˜aode som, renderiza¸c˜ao de html, verifica¸c˜aoortogr´afica,etc. Uma das maiores vantagens do de- senvolvimento de software para GNU/Linux ´ea possibilidade de estender a reusabilidade de c´odigo. Para utilizar uma biblioteca em seu programa, vocˆe deve ordenar explicitamente que o g++ a ligue ao seu programa, atrav´esda diretiva −l<nome da biblioteca>: user@host:/home/user$ g++ −o <programa> <programa>.cc −lm No exemplo acima, a biblioteca libm (biblioteca de fun¸c˜oesmatem´aticas) ser´aligada. Esta biblioteca oferece as fun¸c˜oes trigonom´etricase aritm´etica complexa, e portanto ´emuito utilizada. A diretiva −l<nome> busca um arquivo chamado lib<nome>.a nos diret´oriosde bibliotecas do sistema e substitui a diretiva pela sua localiza¸c˜ao. O exemplo acima ´eequivalente a: user@host:/home/user$ g++ −o <programa> <programa>.cc /usr/lib/libm.a CAP´ITULO 1. PROGRAMAC¸ AO˜ C++ PARA GNU/LINUX 8 As bibliotecas listadas na diretiva −l s˜aobuscadas nos diret´orioslistados no arquivos /etc/ld.so.conf. Quando este arquivo for alterado, o comando ldconfig deve ser chamado para atualizar a base de dados do sistema. O usu´ario pode definir diret´orios adicionais para a pesquisas por bibliotecas definindo a vari´avel de ambiente $LD LINK PATH ou atrav´esda diretiva −L: user@host:/home/user$ export LD LINK PATH=˜/lib ou: user@host:/home/user$ g++ −o <programa> <programa>.cc −lmylib −L˜/lib Exportar as funcionalidades da sua aplica¸c˜aoatrav´es de bibliotecas pode ajudar a promover a reusabilidade, como ´ecomum no desenvolvimento de software livre. 1.1.3 Inclus˜aode Cabe¸calhos A diretiva de pr´e-compila¸c˜ao#include <cabecalho.h> ´eutilizada para in- cluir cabe¸calhos do sistema, enquanto que #include ”cabecalho.h” deve ser utilizada para incluir cabe¸calhosdefinidos pelo pr´oprio desenvolvedor da aplica¸c˜ao.De forma similar `asbibliotecas, os cabe¸calhosa serem inclu´ıdos tamb´ems˜aoprocurados nos diret´orios padr˜aodo sistema. Para especificar um diret´oriocom cabe¸calhos, a diretiva −I<diretorio> deve ser utilizada. O usu´ario tamb´em pode definir a vari´avel $C INCLUDE PATH (para c´odigo em C), $CPLUS INCLUDE PATH para c´odigoem C++, ou $CPATH para cabe¸calhos que podem ser inclu´ıdos em ambas as linguagens. 1.2 O Programa pkg-config O conjunto de bibliotecas que formam o GTK+/GNOME imp˜oealguma complexidade `acompila¸c˜ao,exigindo que um grande n´umerode diretivas −I, −L e −l sejam necess´arias.Para facilitar a compila¸c˜aode aplica¸c˜oes que uti- lizem estas bibliotecas, um programa foi desenvolvido que inclui automatica- mente as diretivas necess´arias para utilizar cada biblioteca. Este programa, distribu´ıdojunto com o ambiente GNOME, ´echamado de pkg-config e sua sintaxe ´e: CAP´ITULO 1. PROGRAMAC¸ AO˜ C++ PARA GNU/LINUX 9 user@host:/home/user$ pkg−config <opcoes> <biblioteca(s)> Para mostrar as diretivas −I, −L e −l necess´arias para utilizar o gtkmm, digite: user@host:/home/user$ pkg−config gtkmm−2.0 −−cflags −−libs Em um shell bash, podemos incluir o resultado de uma execu¸c˜aodo pkg- config utilizando a constru¸c˜ao‘<comando>‘, que substitui o <comando> entre as crases pelo conte´udo de sua sa´ıda padr˜ao.Assim, para compilar um programa C++ que utiliza o gtkmm com o pkg-config digite: user@host:/home/user$ g++ −o <programa> <programa>.cc pkg−config gtkmm−2.0 −−cflags −−libs 1.2.1 Funcionamento do pkg-config Para cada biblioteca que o programa pkg-config suporta, existe um arquivo .pc no sistema de arquivos. O pkg-config procura por arquivos .pc em todos os diret´orioslistados na vari´avel $PKG CONFIG PATH. Para visualizar seu valor, digite: user@host:/home/user$ echo $PKG CONFIG PATH e para alterar seu valor: user@host:/home/user$ export PKG CONFIG PATH= <diretorio>:<diretorio>:<...> ou adicione esta linha ao seu arquivo ˜/.bashrc para ser carregado au- tomaticamente. Caso um desenvolvedor queira que uma biblioteca seja suportada pelo pkg-config, ele deve desenvolver um arquivo .pc.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    55 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us