从 gtk 树视图的选定行获取数据 - gtkmm,c++

Dan*_*JAB 5 c++ gtk treeview selection gtkmm

treeview我有一个 GTK 应用程序,它有一个带有和 按钮的窗口。单击按钮时,我需要从 .txt 文件中所选行的第一列(也是唯一一列)获取数据treeview

这是列的类:

class ModelColumns: 
public Gtk::TreeModel::ColumnRecord{
    public:

    ModelColumns(){ add(m_port_name); }

    Gtk::TreeModelColumn<Glib::ustring> m_port_name;
};
Run Code Online (Sandbox Code Playgroud)

这与此处的示例类似,但只有一列: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.
}
Run Code Online (Sandbox Code Playgroud)

我搜索了文档和许多示例来尝试找出下一步该做什么,但找不到 gtkmm 的任何示例,我只能找到 c 或 python 实现的示例。

据我所知,我需要从我的( ) 获取一个TreeRow对象,我该怎么做?iteratorselectedRow

谢谢。


更新:

我现在正在使用这段代码,它几乎可以工作。唯一的问题是它打印了之前的选择。第一次我选择某些内容然后按下按钮时,它只打印一个新行。第二次打印第一次选择的内容,第三次打印第二次选择的内容,依此类推。

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());
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪。(m_Columns是该类的一个实例ModelColumns


更新2:

通过添加解决了问题fflush(stdout); 现在一切正常,谢谢。

XOR*_*ist 4

文档说只需取消引用 iter 即可获取 TreeRow:

Gtk::TreeModel::Row row = *iter;   // 'iter' being your 'selectedRow'
std::cout<<row[0]; 
Run Code Online (Sandbox Code Playgroud)