我有一个 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
is the treeview
widget
tvPortsList
is the 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
) 我该怎么做呢?
Thanks.
Update:
我现在正在使用这段代码,它几乎可以工作。
唯一的问题是它打印了之前的选择。
第一次我选择某些内容然后按下按钮时,它只打印一个新行。第二次打印第一次选择的内容,第三次打印第二次选择的内容,依此类推。
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
class)
更新2:
通过添加解决了问题fflush(stdout);
现在一切正常了,谢谢。