【问题标题】:Gtk::TreeModelColumn / GType in C++ (gtkmm3)C++ 中的 Gtk::TreeModelColumn / GType (gtkmm3)
【发布时间】:2012-10-18 10:38:57
【问题描述】:

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

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

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

有没有办法以某种方式将任意 GType(TreeModelColumn 内部的底层 gtk 对象)转换为 C++ 类型,以便我能够转换为它?

如果不是 - 为什么它存在于 gtkmm 中?那里的真正目的是什么?

【问题讨论】:

    标签: c++ gtkmm gtk3


    【解决方案1】:

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

    但是,如果您尝试创建一个具有 create(TreeModelColumnRecord)(如 ListStore 和 TreeStore)的通用数据模型,则会为您提供那些 TreeModelColumn。在这种情况下,您可以通过调用 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_casting 来真正打开 C++ 类型。关于如何存储东西的决定完全取决于您。但如果我是你,我会尽可能使用 ListStore 或 TreeStore。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      相关资源
      最近更新 更多