Добавить акселератор Ctrl + F для текстового поиска

Я пытаюсь добавить ускоритель Ctrl + F в мою программу просмотра текста gtkmm. Я уже реализовал функцию поиска в поле ввода gtk, поэтому единственное, что мне нужно, — это сфокусировать запись поиска при нажатии Ctrl + F.

Я гуглил и проверил учебники / справочник по gtkmm (2.4, я работаю с этим), но единственные вещи, которые я нашел, были ускорители в контексте с меню и панелями инструментов, использующими UIManager, которых у меня нет в этом файле .cc, который я использую ( и я не могу добавить их, потому что это существующая программа).

Я пытался добавить действие с помощью AccelKey для кнопки или пытался использовать функцию add_accelerator (), но я не смог их правильно использовать (я довольно новичок в gtkmm и не хватает образцов — по крайней мере, ни одного из них я не понимаю) , Вот несколько примеров, которые я попробовал:

  _gtkActionGroup->add(
Gtk::Action::create("find", "Find", "search in file"),
Gtk::AccelKey("<control>F"),
sigc::mem_fun(this, &SrcFilesView::onGtkTxtFindAccKeyPressed));

Я не знал, как добавить это действие к кнопке (на панели инструментов), которую я создал …

  _gtkAccelGroup(Gtk::AccelGroup::create()) //initialized  in the constructor of the class
...
_gtkBtnFind.add_accelerator("find", _gtkAccelGroup, GDK_Find,
Gdk::ModifierType::CONTROL_MASK, Gtk::ACCEL_VISIBLE);

Я попробовал кое-что здесь, но я действительно не понимал ни параметры, которые мне нужно было ввести здесь, ни как этот метод работает — конечно, он не работал …

Я был бы очень рад, если бы кто-нибудь мог объяснить мне, как все это работает должным образом, и извините за мой плохой английский. Если есть какие-то вещи, которые вам нужны, просто скажите мне, пожалуйста. заранее спасибо

Привет

редактировать: я посмотрел в источниках GTK и попытался понять параметры add_accelerator. Сейчас я попробовал это, но все еще не работает …:

  _gtkBtnFind.add_accelerator("clicked", _gtkAccelGroup, GDK_KEY_F /* or better GDK_KEY_f ?*/,
Gdk::ModifierType(GDK_CONTROL_MASK), Gtk::AccelFlags(GTK_ACCEL_VISIBLE));
_gtkBtnFind.signal_clicked().connect(
sigc::mem_fun(this, &SrcFilesView::onGtkTxtFindAccKeyPressed));

ОБНОВИТЬ:

Хорошо, теперь я понял больше всего, я думаю, и я знаю, почему это не работает. Проблема в том, что мне нужно добавить accel_group в виджет окна, но я получил только прокручиваемое окно и поля в моей программе …. и теперь я понятия не имею, как продолжить … 🙂

UPDATE2:

Хорошо, мне удалось сделать это без ускорителей, используя обработчик on_key_press_event, проверив параметр state и keyval. Надеюсь, это поможет некоторым людям по крайней мере ^^.

bool on_key_press_event(GdkEventKey* event) { /* declaration in my constructor removed */
if(event->state == GDK_CONTROL_MASK && event->keyval == GDK_KEY_f
|| event->state == (GDK_CONTROL_MASK | GDK_LOCK_MASK)
&& event->keyval == GDK_KEY_F) {
_gtkEntFind.grab_focus();
}
return false;
}

Мне бы все равно было интересно решение с ускорителями, если оно есть! Привет

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]