如何从gtkmm树视图中获取所选行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从gtkmm树视图中获取所选行相关的知识,希望对你有一定的参考价值。
我有一个使用ListStore的gtkmm TreeView。我使用它作为静态列表选择菜单。我在查看用户何时更改行以及选择了哪一行时遇到问题。
我试图使用m_TreeView.signal_row_activated().connect( sigc::mem_fun(*this, &optionList::row_activated) );
但得到的错误
error: no match for call to ‘(sigc::bound_mem_functor0<void, optionList>) (const Gtk::TreePath&, Gtk::TreeViewColumn* const&)’ { return functor_(_A_arg1, _A_arg2); }
我也试图使用改变的信号,但我收到了同样的错误。我在Google上发现这些错误并不富有成效。我还没有看到另一种创建静态列表选择菜单的方法。
我的代码如下:
optionList::optionList() {
set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
add(m_TreeView);
m_refListStore = Gtk::ListStore::create(m_Columns);
m_TreeView.set_model(m_refListStore);
m_TreeView.set_activate_on_single_click(true);
std::array<Glib::ustring, 3> options = {"Status", "Plugins", "Config"};
for(const auto & option : options) {
std::ostringstream text;
text << option;
Gtk::TreeModel::Row row = *(m_refListStore->append());
row[m_Columns.m_col_text] = text.str();
}
m_TreeView.append_column("Options", m_Columns.m_col_text);
m_TreeView.signal_state_changed().connect( sigc::mem_fun(*this, &optionList::row_activated) ); //This line produces the error
show_all_children();
}
optionList::row_activated
函数只是一个cout
所以我知道它至少被激活了。如果我删除连接线,那么它编译并运行正常,但我没有办法告诉它是否被选中。
我期待每次选择不同的行时,在控制台中看到短语A row has been selected
(因为这是row_activated
输出的)。但是,我甚至无法编译包含上述行的代码。
至少,我如何解决这个连接问题,以便代码可以编译和激活该函数?
编辑:我相信我搞砸了,需要使用sigc::bind()
发送
答案
我能想到的最好的答案是我没有正确地通过,我需要使用它
m_TreeView.signal_state_changed().connect( sigc::bind(sigc::mem_fun(*this, &optionList::row_activated), any parameters) );
以上是关于如何从gtkmm树视图中获取所选行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 3 的 UIPickerView 中获取所选行的字符串值?
MySQL从一个表中选择行,第二个表中有多行,并在所选行中获取多行数组