使用Glib::RefPtr
get_widget
函数获取Gtk::Builder
到任何窗口小部件相当简单,但是当获取其他对象时,相应的get_object
函数返回Glib::Object
,不可轻松转换为所需的类(例如Gtk::TreeView
)。
这样做的恰当方法是什么?
答案 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") );