【问题标题】:gtk2hs - Getting back a ListStore from a TreeViewgtk2hs - 从 TreeView 取回 ListStore
【发布时间】:2016-01-26 00:04:25
【问题描述】:

我有一个TreeView 的句柄,它恰好有一个ListStore 作为它的模型。我想要做的是从我的TreeView 的句柄中取回ListStore 的句柄。

正如here 所指出的,treeViewGetModel getter 返回一个通用的TreeModel,而不是TreeModelClass 的实例,特别是这里的ListStore。我也不知道从TreeModelListStore 的任何转换函数...

我也想做this(也就是说,在我定义它时保留模型的句柄并将其传递到我想使用它的地方)。

有人知道解决这个问题的好方法吗?

【问题讨论】:

    标签: haskell treeview gtk2hs treemodel


    【解决方案1】:

    问题源于树视图可能具有不同的模型这一事实。函数TreeView a -> ListStore a 将是部分的(未为具有不同模型的树视图定义),因此使用起来不安全。

    此问题已在gtk2hs's tracStack Overflow 上多次提出。建议的解决方案总是与您提到的并希望避免的类似。

    我不完全确定,但我认为以下几行会实现不安全的强制转换:

    unsafeCastToListStore :: TreeView a -> ListStore a
    unsafeCastToListStore = 
      unsafeCastGObject . toGObject . treeViewGetModel
    

    您可以使用 glib 库中 GObject 的函数来确定模型是否确实是 ListStore 并确保铸造安全,即。重调Maybe (ListStore a)

    特别是,我建议查看isA :: GObjectClass o => o -> GType -> Bool。可悲的是,如果没有其他函数可以为您提供 GType 以获取 ListStore,您可能必须通过 FFI 使用 C 函数 gtk_list_store_get_type

    或者,如果您可以编译和绑定您自己的 gtk2hs 分支,您也许可以重新导出 gtk 导出但 gtk2hs 不能导出的内部函数/模块(如果这是针对闭源项目或供内部使用),尽管这会产生额外的维护费用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2012-04-16
      相关资源
      最近更新 更多