2013-08-26 47 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

相關問題