(所有这些都是从实现自己的 TreeModel 的角度来看,而不是使用现有的)
我如何在自己的 TreeModel 的 C++ 实现中使用 Gtk::TreeModelColumn?
据我了解,它的目的是唯一标识列的类型,但是我如何在 C++ 域中以这种方式使用它?
有没有办法以某种方式将任意 GType(TreeModelColumn 内部的底层 gtk 对象)转换为 C++ 类型,所以我可以转换为它?
如果不是 - 为什么它存在于 gtkmm 中?那里的真正目的是什么?
我如何在自己的 TreeModel 的 C++ 实现中使用 Gtk::TreeModelColumn?
我认为您不需要这样做,而且我认为这样做没有意义。
Gtk::TreeModel::Column 供应用程序使用,当使用任何 Gtk::TreeModel 时:http: //developer.gnome.org/gtkmm-tutorial/unstable/sec-treeview-model.html.en#treeview-model -列
它在 API 中的目的是避免您(作为应用程序开发人员)必须记住列索引和列类型,并让您使用它的特定类型来调用重载方法,通常不用担心它是如何工作的。
但是,如果您尝试创建具有像 ListStore 和 TreeStore 这样的 create(TreeModelColumnRecord) 的通用数据模型,则会为您提供那些 TreeModelColumn<>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<>ing打开 C++ 类型。关于如何存储东西的决定完全取决于您。但如果我是你,我会尽可能使用 ListStore 或 TreeStore。