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++ 技术。代理包含对相关TreeRowTreeModelColumn<ColumnType> 对象的引用,用于执行实际工作。

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

如果您想要了解杂乱的细节,可以查看的源文件是here for TreeRow 和here for TreeModelColumn。

【讨论】:

知道有一个对应于列位置的计数器有助于让这变得简单!非常感谢!

以上是关于gtkmm 树模型添加行的主要内容,如果未能解决你的问题,请参考以下文章

在树视图 gtkmm 中为行设置标题

呈现窗口时出现 Gtkmm 分段错误

为啥 gtkmm 行 get_value 不起作用?

剑道网格 - 如何在添加/编辑子行时访问父行模型(详细网格)

Django:如何根据来自行的数据和来自另一个模型的数据将聚合字段添加到查询集中?

在 django formset 中动态添加行