繁体   English   中英

从gtk treeview的选定行中获取数据 - gtkmm,c ++

[英]Get data from selected row of gtk treeview - gtkmm, c++

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

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

tvPortstreeview小部件

tvPortsListtreeviewlistStore

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);修复了问题fflush(stdout); 现在一切正常,谢谢。

文档说要简单地取消引用iter来获取TreeRow:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM