2012-10-18 11 views
0

(所有這一切都在實施自己的TreeModel,不存在一個使用的角度來看)的Gtk :: TreeModelColumn /的GType在C++(gtkmm3)

如何使在C++實現的任何使用GTK :: TreeModelColumn的自己的TreeModel?

據我瞭解,它服務於唯一標識列類型的目的,但我如何在C++域以這種方式使用它?

有沒有辦法以某種方式將任意GType(它是TreeModelColumn中的底層gtk對象)轉換爲C++類型,所以我可以將其轉換爲它?

如果不是 - 爲什麼它存在於gtkmm中?那真正的目的是什麼?

回答

2

我該如何在自己的TreeModel的C++實現中使用Gtk :: TreeModelColumn?

我不認爲你需要,我不認爲這是有道理的。

的Gtk :: TreeModel的::列是應用程序使用,使用任何的Gtk :: TreeModel中時:不必記住 http://developer.gnome.org/gtkmm-tutorial/unstable/sec-treeview-model.html.en#treeview-model-columns

其在API中目的是爲了避免你(作爲應用開發者)列索引和列類型,並讓您使用其特定類型來調用重載方法,通常不用擔心如何工作。但是,如果您正在嘗試創建一個具有像ListStore和TreeStore一樣的create(TreeModelColumnRecord)的通用數據模型,那麼它將爲您提供那些TreeModelColumn <> s。在這種情況下,你可以像gtkmm的那樣,通過調用類型()得到GTypes: 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 <>要真正開啓C++類型。關於如何存儲物品的決定完全取決於您。但如果我是你,我會盡可能使用ListStore或TreeStore。