Получить данные из выбранной строки дерева просмотра gtk - gtkmm, c++

У меня есть приложение GTK, в котором есть окно с treeview и кнопкой. Когда кнопка нажата, мне нужно получить данные из первого (и единственного) столбца выбранной строки в таблице treeview.

Это класс для столбцов:

class ModelColumns: 
public Gtk::TreeModel::ColumnRecord{
    public:

    ModelColumns(){ add(m_port_name); }

    Gtk::TreeModelColumn<Glib::ustring> m_port_name;
};

Это похоже на приведенный здесь пример, но только с одним столбцом: http://www.lugod.org/presentations/gtkmm/treeview.html

Это обработчик сигнала нажатия кнопки на данный момент:

tvPorts это виджет treeview

tvPortsList это listStore для treeview

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.
}

Я просмотрел документацию и множество примеров, чтобы попытаться выяснить, что делать дальше, но не могу найти примеров для gtkmm, я могу найти только примеры для реализаций c или python.

Насколько я могу судить, мне нужно получить объект TreeRow из моего iterator (selectedRow), как мне это сделать?

Спасибо.


Обновление:

Я сейчас использую этот код, и он почти работает. Единственная проблема заключается в том, что он печатает предыдущий выбор. В первый раз, когда я что-то выбираю, а затем нажимаю кнопку, он печатает только новую строку. Во второй раз печатает то, что было выбрано в первый раз, в третий печатает второй и т.д.

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());

Это кажется странным. (m_Columns является экземпляром класса ModelColumns)


Обновление 2:

Решил проблему, добавив fflush(stdout); Теперь все работает, спасибо.


person DanJAB    schedule 26.08.2013    source источник


Ответы (1)


В документах говорится, что нужно просто разыменовать iter, чтобы получить TreeRow:

Gtk::TreeModel::Row row = *iter;   // 'iter' being your 'selectedRow'
std::cout<<row[0]; 
person XORcist    schedule 26.08.2013
comment
Это очень помогло, спасибо. Однако есть небольшая проблема, упомянутая в обновлении вопроса. - person DanJAB; 26.08.2013
comment
Понял, стандартный вывод не сбрасывался должным образом. Спасибо за помощь. - person DanJAB; 26.08.2013