Как получить выбранную строку из дерева просмотра gtkmm - PullRequest
1 голос
/ 14 апреля 2019

У меня есть TreeView gtkmm, используя ListStore.Я использую это как меню выбора статического списка.У меня проблемы с просмотром, когда пользователь меняет строки и какая строка выбрана.

Я пытался использовать 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()

1 Ответ

0 голосов
/ 23 апреля 2019

Лучший ответ, который я могу придумать, это то, что я не прошел должным образом, и для этого мне нужно использовать

m_TreeView.signal_state_changed().connect( sigc::bind(sigc::mem_fun(*this, &optionList::row_activated), any parameters) );
...