Chapter 26. Gtk::Builder

# Chapter 26. Gtk::Builder

Although you can use C++ code to instantiate and arrange widgets, this can soon become tedious and repetitive. And it requires a recompilation to show changes. The Cambalache application allows you to layout widgets on screen and then save an XML description of the arrangement. Your application can then use the Gtk::Builder API to load that XML file at runtime and obtain a pointer to specifically named widget instances.

This has the following advantages:

1. Less C++ code is required.
2. UI changes can be seen more quickly, so UIs are able to improve.
3. Designers without programming skills can create and edit UIs.

You still need C++ code to deal with User Interface changes triggered by user actions, but using Gtk::Builder for the widget layout allows you to focus on implementing that functionality.

Cambalache replaces the Glade application. Glade can generate XML files to be used with gtk3/gtkmm3, but it does not support gtk4/gtkmm4.

## Loading the .ui file

`Gtk::Builder` must be used via a `Glib::RefPtr`. Like all such classes, you need to use a `create()` method to instantiate it. For instance,

    auto builder = Gtk::Builder::create_from_file("basic.ui");

This will instantiate the windows defined in the `.ui` file.

To instantiate just one window, or just one of the child widgets, you can specify the name of a widget as the second parameter. For instance,

    auto builder = Gtk::Builder::create_from_file("basic.ui", "treeview_products");

Shared resources |  | Accessing widgets