У меня есть приложение 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);
Теперь все работает, спасибо.