Ordenar

Los modelos de árbol estándar (TreeStore y ListStore) derivan de TreeSortable, por lo que ofrecen funciones de ordenación. Por ejemplo, llame a set_sort_column() para ordenar el modelo por la columna especificada. O, proporcione una función de retorno de llamada a set_sort_func() para implementar un algoritmo de ordenación más complejo.

Referencia de TreeSortable

9.5.1. Ordenación al pulsar en columnas

Para que un usuario pueda pulsar en la cabecera de una columna de un TreeView para ordenar el contenido del TreeView, llame a Gtk::TreeViewModel::set_sort_column(), proporcionando al modelo la columna por la que se deba ordenar cuando se pulse sobre la cabecera. Por ejemplo:

Gtk::TreeView::Column* pColumn = treeview.get_column(0);
if(pColumn)
  pColumn->set_sort_column(m_columns.m_col_id);

9.5.2. Vistas ordenadas independientemente del mismo modelo

El TreeView ya le permite mostrar al mismo TreeModel en dos widgets TreeView. Si necesita que uno de estos «TreeView» ordene el modelo de manera diferente al otro, entonces use un TreeModelSort en lugar de solo, por ejemplo, Gtk::TreeViewModel::set_sort_column(). TreeModelSort es un modelo que contiene a otro modelo, presentando una versión ordenada de ese modelo. Por ejemplo, puede añadir una versión ordenada de un modelo a un TreeView así:

Glib::RefPtr<Gtk::TreeModelSort> sorted_model =
    Gtk::TreeModelSort::create(model);
sorted_model->set_sort_column(columns.m_col_name, Gtk::SORT_ASCENDING);
treeview.set_model(sorted_model);

Tenga en cuenta, sin embargo, que el «TreeView» le proporcionará iteradores al modelo ordenado. Debe convertirlos a iteradores del modelo hijo subyacente para llevar a cabo acciones en ese modelo. Por ejemplo:

void ExampleWindow::on_button_delete()
{
  Glib::RefPtr<Gtk::TreeSelection> refTreeSelection =
      m_treeview.get_selection();
  if(refTreeSelection)
  {
    Gtk::TreeModel::iterator sorted_iter =
        m_refTreeSelection->get_selected();
    if(sorted_iter)
    {
      Gtk::TreeModel::iterator iter =
          m_refModelSort->convert_iter_to_child_iter(sorted_iter);
      m_refModel->erase(iter);
    }
  }
}

Referencia de TreeModelSort