2013-08-26 33 views
2

我有一个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

这是此刻的按钮,点击信号处理程序:

tvPortstreeview部件

tvPortsListlistStoretreeview

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实现的例子。

据我所知,我需要从iteratorselectedRow)得到一个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_ColumnsModelColumns类的一个实例)


更新2:

加入fflush(stdout); 它所有的工作现在,由于解决了这一问题。

回答

4

docs说,简单地取消引用国际热核实验堆,以获得TreeRow:

Gtk::TreeModel::Row row = *iter; // 'iter' being your 'selectedRow' 
std::cout<<row[0]; 
+0

这帮助了这么多,谢谢。尽管如此,问题更新中提到了一个小问题。 – DanJAB

+0

明白了,stdout没有正常冲洗。谢谢您的帮助。 – DanJAB

相关问题