El modelo
Cada Gtk::TreeView tiene un Gtk::Model asociado que contiene los datos mostrados por el TreeView Varios Gtk::TreeView puede usar el mismo Gtk::TreeModel. Por ejemplo, esto le permite mostrar y editar los mismos datos de 2 formas diferentes al mismo tiempo. O las 2 vistas pueden mostrar diferentes columnas de los mismos modelos de datos, de la misma manera que dos consultas SQL (o «vistas») pueden mostrar diferentes campos de la misma tabla de la base de datos.
A pesar de que, teóricamente, puede implementar su propio modelo, normalmente usará las clases de los modelos ListStore o TreeStore.
- 9.1.1. ListStore, para filas
- 9.1.2. TreeStore, para una jerarquía
- 9.1.3. Columnas del modelo
- 9.1.4. Añadir filas
- 9.1.5. Configurar los valores
- 9.1.6. Obtener los valores
- 9.1.7. Columnas «ocultas»
9.1.1. ListStore, para filas
El ListStore contiene filas simples de datos, y ninguna fila tiene hijos.
9.1.2. TreeStore, para una jerarquía
El TreeStore contiene filas de datos, y cada fila puede tener filas hijas.
9.1.3. Columnas del modelo
La clase TreeModelColumnRecord se usa para rastrear a las columnas y sus tipos de datos. Añádale instancias TreeModelColumn al ColumnRecord y luego use esas TreeModelColumn cuando establezca u obtenga los datos en las filas del modelo. Probablemente encuentre conveniente derivar un TreeModelColumnRecord que tenga a sus instancias TreeModelColumn como datos miembro.
class ModelColumns : public Gtk::TreeModelColumnRecord { public: ModelColumns() { add(m_col_text); add(m_col_number); } Gtk::TreeModelColumn<Glib::ustring> m_col_text; Gtk::TreeModelColumn<int> m_col_number; }; ModelColumns m_Columns;
Especifique el ColumnRecord cuando cree el modelo, así:
Glib::RefPtr<Gtk::ListStore> refListStore = Gtk::ListStore::create(m_Columns);
Tenga en cuenta que la instancia (como m_Columns aquí) normalmente no debe ser estática, porque a menudo se necesita instanciarla después de haber instanciado a glibmm.
9.1.4. Añadir filas
Añadir filas al modelo con los métodos append(), prepend(), o insert().
Gtk::TreeModel::iterator iter = m_refListStore->append();
Puede desreferenciar al iterador para obtener la fila:
Gtk::TreeModel::Row row = *iter;
- 9.1.4.1. Añadiendo filas secundarias
9.1.5. Configurar los valores
Puede usar la sobrecarga de operator[] para establecer los datos de una columna particular en la fila, especificando la TreeModelColumn que se usó para crear el modelo.
row[m_Columns.m_col_text] = "sometext";
9.1.6. Obtener los valores
Puede usar la sobrecarga operator[] para obtener los datos de una columna particular en una fila, especificando la TreeModelColumn que se usó para crear el modelo.
Glib::ustring strText = row[m_Columns.m_col_text]; int number = row[m_Columns.m_col_number];
El compilador le hará saber si usa un tipo inapropiado. Por ejemplo, esto generaría un error de compilación:
//compiler error - no conversion from ustring to int. int number = row[m_Columns.m_col_text];