gtkmm 树模型添加行
Posted
技术标签:
【中文标题】gtkmm 树模型添加行【英文标题】:gtkmm treemodel adding rows 【发布时间】:2012-06-28 03:14:13 【问题描述】:我对这个 ListStore 在本教程中的工作方式有些困惑 http://developer.gnome.org/gtkmm-tutorial/3.0/sec-treeview-examples.html.en
除了 row[m_Columns.m_ITEM] = value 之外,我几乎了解所有内容
我的问题是它如何知道根据传递给重载 [] 的其他对象将值设置为行中的哪一列。它只是检查类型是否相同吗?如果是这样,那么如果您有两个相同类型的列会发生什么?它是否根据内存偏移量来确定它是哪一列?
我很难弄清楚从提供 m_Columns 实例的成员到确定应该将值放入哪一列。
我想如果我能请人解释一下内部如何在树模型系统上工作,那就太好了,比如创建以及添加新行的每个步骤会发生什么。
【问题讨论】:
【参考方案1】:有一些模板诡计正在发生。 TreeRow
中的数组运算符为TreeModelColumn<ColumnType>
的每个实例化而重载。为了允许您分配给列并读取它,它返回一个实际实现这些操作的代理对象 (TreeValueProxy<ColumnType>
)。代理对象是实现类数组对象的标准 C++ 技术。代理包含对相关TreeRow
和TreeModelColumn<ColumnType>
对象的引用,用于执行实际工作。
TreeModelColumn<ColumnType>
对象还存储了一个与列类型对应的gobject
类型,以及一个与列位置对应的整数。这最终用于与从TreeRow::set_value<ColumnType>()
和TreeRow::get_value<ColumnType>()
开始的gtk+ 库进行交互。
如果您想要了解杂乱的细节,可以查看的源文件是here for TreeRow 和here for TreeModelColumn。
【讨论】:
知道有一个对应于列位置的计数器有助于让这变得简单!非常感谢!以上是关于gtkmm 树模型添加行的主要内容,如果未能解决你的问题,请参考以下文章
剑道网格 - 如何在添加/编辑子行时访问父行模型(详细网格)