【问题标题】:Is it possible to instruct a `Gtk::TreeView` to display a custom type?是否可以指示 `Gtk::TreeView` 显示自定义类型?
【发布时间】:2015-12-27 18:42:46
【问题描述】:

有些事情我不明白如何使用 Gtkmm 3。

我有一个自定义业务类型,我声明如下:

enum class Eurocents : int {};

我想将此类型渲染为具有Gtk::ListStore 作为模型的Gtk::TreeView。所以我声明了一个Gtk::TreeModelColumn<Eurocents>,并将其添加到模型中。然后我把append_column这个模型列给Gtk::TreeView加上一个合适的标题。

然后我将append_row 设置为模型并将列对应的值设置为(Eurocents)100

我得到的结果是单元格显示为空。可以理解,因为我不希望 Gtkmm 知道如何呈现我的任意类型。

我想指导 Gtkmm 如何渲染我的类型。

我已经知道如何显示像 Glib::ustring 这样的 Glib 类型,并且可以格式化为 Glib::ustring 进行显示,但这不是问题的主题。

是否可以对可以显示任意类型的列进行编码?如果是这样,怎么办?排序需要什么?

【问题讨论】:

    标签: c++11 gtkmm gtkmm3


    【解决方案1】:

    最常见、最简单的方法是使用 cell_data_func 回调。例如,您可以创建自己的 Gtk::TreeView::Column 实例(视图列),将单元格渲染器(或更多)打包到您的 Gtk::TreeView::Column 中,附加您的 Gtk::TreeView::使用 Gtk::TreeView::append_column() 将列添加到 TreeView,并在 Gtk::TreeView::Column() 上调用 set_cell_data_func(): https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeViewColumn.html#a3469e1adf42e5932ea123ec33e4ce4e1

    然后,您的回调将从模型中获取值并设置渲染器属性的适当值。

    这里是一个例子,展示了 set_cell_data_func() 的使用,以及其他的东西: https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-examples.html.en#sec-editable-cells-example

    此链接也应该很有用: https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview.html.en#treeview-cellrenderer-details

    如果你喜欢,Gtk::TreeView::insert_column_with_data_func() 可以让这更简洁一点:https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeView.html#a595dcc0b503a7c1004c296b82c51ac54

    至于排序,你应该可以调用 set_sort_func() 来指定列的排序方式:https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeSortable.html#a3a6454bd0a285324c71edb73e403cb1c

    那么这个常规的排序建议应该适用:https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-sort.html.en

    【讨论】:

    • 谢谢。您能否详细说明应如何实现适当的可排序性?
    • “创建自己的 TreeView::Column”是什么意思?子类化还是实例化?
    • @LaurentLARIZZA 我的意思是一个实例。我已经编辑了答案以澄清这一点。
    • @LaurentLARIZZA 我添加了一些关于排序的内容。
    猜你喜欢
    • 2012-05-30
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多