添加行的 gtkmm 树模型

gtkmm treemodel adding rows

本文关键字:模型 gtkmm 添加行      更新时间:2023-10-16

我对本教程中的这个列表存储如何工作有些困惑 http://developer.gnome.org/gtkmm-tutorial/3.0/sec-treeview-examples.html.en

我几乎了解除行[m_Columns.m_ITEM] =值之外的所有内容

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

我很难弄清楚它是如何从提供 m_Columns 实例的成员到确定它应该将值放入哪一列的。

我想如果我能让某人解释内部如何在树模型系统上工作,那就太好了,比如创建会发生什么,然后添加新行的每一步,什么不是。

有一些模板技巧正在进行。TreeRow 中的数组运算符对于 TreeModelColumn<ColumnType> 的每个实例化都会重载。为了允许您分配给列以及读取它,它返回一个代理对象(TreeValueProxy<ColumnType>),它实际实现这些操作。 代理对象是实现类似数组的对象的标准C++技术。代理包含对相关TreeRowTreeModelColumn<ColumnType>对象的引用,这些对象用于执行实际工作。

TreeModelColumn<ColumnType> 对象还存储与列类型对应的gobject类型,以及与列位置对应的整数。 这最终用于与 TreeRow::set_value<ColumnType>()TreeRow::get_value<ColumnType>() 开始的 gtk+ 库进行接口。

如果你想要凌乱的细节,要查看的源文件在这里用于TreeRow,这里用于TreeModelColumn。