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

C++ 如何使用Gtk::Builder将正确的Glib::RefPtr存储到非小部件,c++,gtkmm,C++,Gtkmm,使用Gtk::Builder的get_widget函数将Glib::RefPtr获取到任何widget都非常简单,但是当涉及到获取其他对象时,相应的get_object函数返回Glib::object,这是不容易转换到所需类的(例如Gtk::TreeView) 这样做的合适方式是什么?Glib::RefPtr有一个静态模板函数,可以执行所需的操作。该函数在逻辑上被调用 示例代码可以是: treeStore = Glib::RefPtr< Gtk::TreeStore >::ca

使用
Gtk::Builder
get_widget
函数将
Glib::RefPtr
获取到任何widget都非常简单,但是当涉及到获取其他对象时,相应的
get_object
函数返回
Glib::object
,这是不容易转换到所需类的(例如
Gtk::TreeView


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

Glib::RefPtr有一个静态模板函数,可以执行所需的操作。该函数在逻辑上被调用

示例代码可以是:

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

最好使用
Glib::RefPtr::cast\u dynamic(对象)

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

如果您的意思是GTK::TeReMod,那么,定义GLKMD C++中的GTKTeMeldRes,这是GTKMM代码中使用的,这是可能的,因为我们最近在GTKMM中添加了一些修复:


<>但是,这不是我们通常期望的工作——许多C++开发人员更喜欢在代码中完全定义数据模型结构的静态类型安全,而不依赖于C和C++类型之间的转换。例如:

还有CasthDyjic()但是,请注意,在GLADE中定义GTKTeMeldRs,用于C++代码中,这是可行的,但一般不期望。@ MurRayc请考虑把它变成一个完整的答案。我真的很想接受一个不是我的答案。