如何使用 Gtk::Builder 将正确的 Glib::RefPtr 存储到非小部件

How to store get a correct Glib::RefPtr to a non-widget using Gtk::Builder

使用Gtk::Builderget_widget函数获取任何widget的Glib::RefPtr是相当简单的,但是当涉及到获取其他对象时,相应的get_object函数 returns Glib::Object,它 很容易转换为所需的 class(例如 Gtk::TreeView)。

这样做的合适方法是什么?

Glib::RefPtr 有一个静态模板函数,它允许一个人做需要做的事情。此函数在逻辑上称为 cast_static.

示例代码可以是:

treeStore = 
  Glib::RefPtr< Gtk::TreeStore >::cast_static( builder->get_object("treestore1") );

最好使用Glib::RefPtr<TheDerivedype>::cast_dynamic(object)

但是,Gtk::TreeView(您在问题中提到)是 Gtk::Widget,因此您将使用 get_widget() 而不是 get_object()。

如果您的意思是,Gtk::TreeModel,好吧,在 Glade 中定义 GtkTreeModels,以便在 gtkmm C++ 代码中使用,这可能会起作用,因为我们最近在 gtkmm 中添加了一些修复: https://bugzilla.gnome.org/show_bug.cgi?id=742637

但这不是我们通常期望的工作 - 许多 C++ 开发人员更喜欢在代码中完全定义 DataModel 结构的静态类型安全,而不依赖于 C 和 C++ 类型之间的转换。例如:https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-model.html.en#treeview-model-liststore