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 are arranged inside container widgets such as frames and notebooks, in a hierarchy of widgets within widgets. Some of these container widgets, such as Gtk::Grid, are not visible - they exist only to arrange other widgets. Here is some example code that adds 2 Gtk::Button widgets to a Gtk::Box container widget:

m_caixa.pack_start(m_Botao1);
m_caixa.pack_start(m_Botao2);
and here is how to add the Gtk::Box, containing those buttons, to a Gtk::Frame, which has a visible frame and title:
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.