如何从 gtkmm 树视图中获取选定的行

How to get the selected row from a gtkmm treeview

我有一个使用 ListStore 的 gtkmm TreeView。我将其用作静态列表 selection 菜单。我在查看用户何时更改行以及哪一行是 selected.

时遇到问题

我尝试使用 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 上没有找到这些错误。我也没有看到另一种创建静态列表的方法 selection 菜单。

我的代码如下:

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,所以我知道它至少被激活了。如果我删除连接线,那么它会编译并运行良好,但我无法判断它是否被 selected.

每次我 select 不同的行时,我都希望在控制台中看到短语 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) );