我对本教程中的ListStore的工作方式有些困惑http://developer.gnome.org/gtkmm-tutorial/3.0/sec-treeview-examples.html.en

我几乎了解所有内容,除了row [m_Columns.m_ITEM] =值

我的问题是如何根据传递给重载[]的某些其他对象来知道将值设置为该行的哪一列。它只是检查类型是否相同?如果是这样,那么如果您有两个相同类型的列怎么办?它是否基于内存偏移量来确定它是哪一列?

我很难弄清楚从提供m_Columns实例的成员到确定应将值放入哪一列的过程。

我想我是否可以让某人解释内部模型如何在treemodel系统上发挥作用,例如创建时发生的事情,然后是添加新行的每一步,什么不行。

最佳答案

发生了一些模板欺骗行为。 TreeRow的每个实例化都重载了TreeModelColumn<ColumnType>中的数组运算符。为了允许您分配和读取该列,它返回一个代理对象(TreeValueProxy<ColumnType>),该对象实际上实现了这些操作。代理对象是用于实现类似数组的对象的标准C++技术。代理包含对相关TreeRowTreeModelColumn<ColumnType>对象的引用,这些引用用于执行实际工作。
TreeModelColumn<ColumnType>对象还存储与列类型相对应的gobject类型,以及与列位置相对应的整数。最终将其用于与gtt +库和从TreeRow::set_value<ColumnType>()TreeRow::get_value<ColumnType>()开始的接口(interface)。

如果要查看困惑的详细信息,请查看的源文件是here for TreeRowhere for TreeModelColumn

10-08 20:03