Gtk :: C ++中的TreeModelColumn / GType(gtkmm3)

时间:2012-10-18 10:38:57

标签: c++ gtkmm gtk3

(所有这些从实现自己的TreeModel的角度来看,而不是使用现有的TreeModel)

如何在自己的TreeModel的C ++实现中使用Gtk :: TreeModelColumn?

据我所知,它的目的是唯一识别列的类型,但我如何在C ++域中以这种方式使用它?

有没有办法以某种方式将任意GType(这是TreeModelColumn中的基础gtk对象)转换为C ++类型,所以我能够转换为它?

如果没有 - 为什么它存在于gtkmm?它的真正目的是什么?

1 个答案:

答案 0 :(得分:2)

  

如何在自己的TreeModel的C ++实现中使用Gtk :: TreeModelColumn?

我觉得你不需要这样做,我觉得它不合理。

Gtk :: TreeModel :: Column用于在使用任何Gtk :: TreeModel时使用的应用程序: http://developer.gnome.org/gtkmm-tutorial/unstable/sec-treeview-model.html.en#treeview-model-columns

它在API中的目的是避免您(作为应用程序开发人员)必须记住列索引和列类型,并让您使用其特定类型来调用重载方法,通常不用担心它是如何工作的。< / p>

但是,如果您正在尝试创建具有类似ListStore和TreeStore的create(TreeModelColumnRecord)的通用数据模型,那么它将为您提供TreeModelColumn&lt;&gt; s。在这种情况下,您可以通过调用types()来获取gtkmm之类的GType: http://git.gnome.org/browse/gtkmm/tree/gtk/src/liststore.ccg#n26

TreeModelColumn :: ElementType可以告诉你C ++类型: http://git.gnome.org/browse/gtkmm/tree/gtk/gtkmm/treemodelcolumn.h#n131 但是你真的需要一些dynamic_cast&lt;&gt;来真正开启C ++类型。关于如何存储东西的决定完全取决于你。但如果我是你,我会尽可能使用ListStore或TreeStore。