Widgets

Os aplicativos gtkmm consistem de janelas contendo widgets (componentes), como botões e caixas de texto. Em alguns outros sistemas, widgets são chamados de "controles". Para cada widget em janelas do seu aplicativo, há um objeto C++ em seu código. Então você precisa chamar um método da classe do widget para afetar o widget visível.

Widgets são organizados dentro de widgets contêneires tais como molduras (frames) e cadernos (notebooks), em uma hierarquia com widgets dentro de widgets. Alguns widgets contêineres, como o Gtk::Grid, não são visíveis, eles só existem para organizar outros widgets. Aqui está um código de exemplo que adicionar 2 widgets Gtk::Button a um widget contêiner Gtk::VBox:

m_caixa.pack_start(m_Botao1);
m_caixa.pack_start(m_Botao2);
e aqui está como adicionar o Gtk::VBox, que contém esses botões, a um Gtk::Frame, que tem uma moldura e um título visíveis:
m_moldura.add(m_caixa);

A maioria dos capítulos deste livro trata de widgets específicos. Veja a seção Widgets contêineres para mais detalhes sobre a adição de widgets a widgets contêineres.

Embora você possa especificar a disposição e a aparência das janelas e widgets com o código C++, você provavelmente achará mais conveniente projetar suas interfaces com o usuário com Glade e carregá-las em tempo de execução com o Gtk::Builder. Veja o capítulo Glade e Gtk::Builder.

Embora as instâncias de widgets gtkmm tenham tempo de vida e escopo como qualquer outra classe C++, o gtkmm tem um recurso poupador de tempo opcional que você verá em alguns exemplos. Gtk::manage() permite que você diga que um widget filho pertence ao contêiner em que você o colocou. Isso permite que você crie um novo (new) widget, adicione-o ao contêiner e esqueça sobre sua exclusão. Você pode aprender mais sobre as técnicas de gerenciamento de memória do gtkmm no capítulo de Gerenciamento de memória.