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