我有一个GTK应用程序,它有一个带有treeview
和一个按钮的窗口。点击按钮时,我需要从treeview
中选定行的第一列(也是唯一一列)获取数据。从gtk treeview的选定行中获取数据 - gtkmm,C++
这是列级:
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实现的例子。
据我所知,我需要从iterator
(selectedRow
)得到一个TreeRow
对象。我该怎么做?
谢谢。
更新:
我现在使用此代码和它差不多的作品。 唯一的问题是它打印了以前的选择。 我第一次选择一些东西,然后按下按钮,它只打印一条新线。第二次打印第一次选择的内容,第三次打印第二次,等等。
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);
它所有的工作现在,由于解决了这一问题。
这帮助了这么多,谢谢。尽管如此,问题更新中提到了一个小问题。 – DanJAB
明白了,stdout没有正常冲洗。谢谢您的帮助。 – DanJAB