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

时间:2015-07-05 12:28:51

标签: c++ gtkmm

使用Glib::RefPtr get_widget函数获取Gtk::Builder到任何窗口小部件相当简单,但是当获取其他对象时,相应的get_object函数返回Glib::Object可轻松转换为所需的类(例如Gtk::TreeView)。

这样做的恰当方法是什么?

2 个答案:

答案 0 :(得分:1)

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

然而,Gtk :: TreeView(你在你的问题中提到)是一个Gtk :: Widget,所以你可以使用get_widget()而不是get_object()。

如果你的意思,Gtk :: TreeModel,好吧,在Glade中定义GtkTreeModel,用于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

答案 1 :(得分:0)

Glib :: RefPtr具有静态模板功能,允许用户执行所需操作。此功能在逻辑上称为cast_static

示例代码可以是:

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