Uzyskaj dane z wybranego wiersza widoku drzewa gtk - gtkmm, c ++
Mam aplikację GTK, która ma okno ztreeview
i przycisk. Po kliknięciu przycisku muszę pobrać dane z pierwszej (i jedynej) kolumny wybranego wiersza wtreeview
.
To jest klasa kolumn:
class ModelColumns:
public Gtk::TreeModel::ColumnRecord{
public:
ModelColumns(){ add(m_port_name); }
Gtk::TreeModelColumn<Glib::ustring> m_port_name;
};
To jest jak w przykładzie tutaj, ale tylko z jedną kolumną:http://www.lugod.org/presentations/gtkmm/treeview.html
W tej chwili jest to przycisk obsługi sygnału kliknięcia:
tvPorts
jesttreeview
widżet
tvPortsList
jestlistStore
dlatreeview
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.
}
Przeszukałem dokumentację i wiele przykładów, aby spróbować dowiedzieć się, co robić dalej, ale nie mogę znaleźć żadnych przykładów dla gtkmm, mogę tylko znaleźć przykłady dla implementacji c lub python.
O ile wiem, muszę dostaćTreeRow
obiekt z mojegoiterator
(selectedRow
) jak mam to zrobic?
Dzięki.
Aktualizacja:
Używam teraz tego kodu i prawie działa. Jedynym problemem jest to, że drukuje poprzedni wybór. Po pierwszym wybraniu czegoś, a następnie naciśnięciu przycisku, drukuje tylko nową linię. Za drugim razem, gdy drukuje to, co zostało wybrane za pierwszym razem, trzeci drukuje drugi itd.
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());
To wydaje się dziwne. (m_Columns
jest instancjąModelColumns
klasa)
Aktualizacja 2:
Naprawiono problem przez dodaniefflush(stdout);
Wszystko działa teraz, dzięki.