【问题标题】:gtkmm treemodel adding rowsgtkmm 树模型添加行
【发布时间】: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 实例的成员到确定应该将值放入哪一列。

我想如果我能请人解释一下内部如何在树模型系统上工作,那就太好了,比如创建以及添加新行的每个步骤会发生什么。

【问题讨论】:

    标签: c++ gtk gtkmm


    【解决方案1】:

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

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

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

    【讨论】:

    • 知道有一个对应于列位置的计数器有助于让这变得简单!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多