Obtenga datos de la fila seleccionada de gtk treeview - gtkmm, c ++
Tengo una aplicación GTK que tiene una ventana con untreeview
y un botón. Cuando se hace clic en el botón, necesito obtener los datos de la primera (y única) columna de la fila seleccionada en latreeview
.
Esta es la clase para las columnas:
class ModelColumns:
public Gtk::TreeModel::ColumnRecord{
public:
ModelColumns(){ add(m_port_name); }
Gtk::TreeModelColumn<Glib::ustring> m_port_name;
};
Esto es como en el ejemplo aquí pero con una sola columna:http://www.lugod.org/presentations/gtkmm/treeview.html
Este es el controlador de señal de clic de botón en este momento:
tvPorts
es eltreeview
widget
tvPortsList
es ellistStore
Para eltreeview
static
void on_btnPortSelectOK_clicked (){
Glib::RefPtr<Gtk::TreeSelection> selection = tvPorts->get_selection();
Gtk::TreeModel::iterator selectedRow = selection->get_selected();
//Now what?
//Need to get data from selected row to display it.
}
He buscado en la documentación y en muchos ejemplos para intentar averiguar qué hacer a continuación, pero no puedo encontrar ningún ejemplo para gtkmm, solo puedo encontrar ejemplos para implementaciones en python.
Por lo que puedo decir, necesito conseguir unTreeRow
objeto de miiterator
(selectedRow
) ¿Cómo hago esto?
Gracias.
Actualizar:
Ahora estoy usando este código y casi funciona. El único problema es que imprime la selección anterior. La primera vez que selecciono algo y luego presiono el botón, se imprime solo una nueva línea. La segunda vez que imprime lo que se seleccionó la primera vez, la tercera imprime la segunda, etc.
Glib::RefPtr<Gtk::TreeSelection> selection = tvPorts->get_selection();
Gtk::TreeModel::iterator selectedRow = selection->get_selected();
Gtk::TreeModel::Row row = *selectedRow;
Glib::ustring port = row.get_value(m_Columns.m_port_name);
printf("\nselected port: %s", port.data());
Esto parece extraño. (m_Columns
es una instancia de laModelColumns
clase)
Actualización 2:
Arreglado el problema agregandofflush(stdout);
Todo funciona ahora, gracias.