2

我不明白如何处理 Gtkmm 3。

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

enum class Eurocents : int {};

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

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

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

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

我已经知道如何显示 Glib 类型,例如Glib::ustring和格式化以Glib::ustring进行显示是可能的,但这不是问题的主题。

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

4

1 回答 1

3

最常见和最简单的方法是使用 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-细胞示例

此链接也应该很有用: 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

于 2015-12-30T20:20:54.093 回答