Можно ли указать `Gtk::TreeView` для отображения пользовательского типа?

Есть кое-что, что я не понимаю, как делать с Gtkmm 3.

У меня есть собственный тип бизнеса, который я объявил так:

enum class Eurocents : int {};

Я хотел бы сделать этот тип в Gtk::TreeView который имеет Gtk::ListStore как модель. Поэтому я объявляю Gtk::TreeModelColumn<Eurocents>и добавьте его в модель. После, я append_column эта модель столбца к Gtk::TreeView с соответствующим названием.

После, я append_row к модели и установите значение, соответствующее столбцу (Eurocents)100,

В результате я получаю, что ячейка отображается пустой. Понятно так, потому что я не ожидал бы, что Gtkmm узнает, как отобразить мой произвольный тип.

Я хотел бы проинструктировать Gtkmm о том, как визуализировать мой тип.

Я уже знаю, как отображать типы Glib, такие как Glib::ustring и форматирование в Glib::ustring для отображения возможно, но это не предмет вопроса.

Можно ли кодировать столбцы, которые могут отображать произвольные типы, как это? И если да, то как? Что требуется для сортировки на работу?

1 ответ

Решение

Наиболее распространенным и простым способом является использование обратного вызова cell_data_func. Например, вы можете создать свой собственный экземпляр Gtk::TreeView::Column (столбец представления), упаковать средство визуализации ячеек (или более) в ваш Gtk::TreeView::Column, добавить свой Gtk:: TreeView:: Столбец TreeView с помощью Gtk::TreeView::append_column() и вызовите set_cell_data_func() для вашего Gtk::TreeView::Column (): https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeViewColumn.html

Затем обратный вызов получит значение (я) из модели и установит соответствующие значения свойств средства визуализации.

Вот пример, который показывает использование 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

Что касается сортировки, у вас должна быть возможность просто вызвать set_sort_func(), чтобы указать, как сортируется столбец: https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeSortable.html

Тогда этот обычный совет сортировки должен применяться: https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-sort.html.en

Другие вопросы по тегам