Gtk::Builder not able to find window in Glade file

I have this Glade file:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
  <requires lib="gtk+" version="3.24"/>
  <object class="GtkApplicationWindow" id="Foobar">
    <property name="name">Foobar</property>
    <property name="width-request">800</property>
    <property name="height-request">600</property>
    <property name="can-focus">False</property>
    <property name="decorated">False</property>
    <property name="show-menubar">False</property>
      [...]
  </object>
</interface>

And I try to read it using gtkmm like this:

m_refBuilder = Gtk::Builder::create();
m_refBuilder->create_from_file("main.glade");
auto foobar = Glib::RefPtr<Gtk::ApplicationWindow>::cast_dynamic(m_refBuilder->get_object("Foobar"));

However, get_object always return a nullptr. Am I doing something wrong, or using the wrong field somewhere?

I found the problem myself. Turns out

m_refBuilder = Gtk::Builder::create();
m_refBuilder->create_from_file("main.glade");

doesn’t load any objects (m_refBuilder->get_objects()->size() is 0). However, if you do

m_refBuilder = Gtk::Builder::create_from_file("main.glade");

it loads your objects.

I just now noticed create_from_file is a static method. Doh.

m_refBuilder = Gtk::Builder::create(); 
m_refBuilder->create_from_file("main.glade"); 

[…]

I just now noticed create_from_file is a static method. Doh.

Indeed :slight_smile: FWIW you could use your initial scheme with add_from_file(), which does what you likely expected from create_from_file().

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.