c++ - 在 Gtk+ (gtkmm) 中连接关键加速器

标签 c++ gtk keyboard-shortcuts gtkmm

我一直在使用 gtkmm 编写一个 Gtk+ 应用程序,我正在尝试添加一个调用回调的全局键盘快捷键。不幸的是,Gtk::AccelGroup 的 connect() 方法在 gtkmm 中不可用,这显然是故意的,因为您可以使用 ActionGroups 建立连接...

无论如何,我有以下代码:

actions_= Gtk::ActionGroup::create();
actions_->set_accel_group(Gtk::AccelGroup::create());

actions_->add(
    Gtk::Action::create("new"), Gtk::AccelKey("<control>n"),
    sigc::mem_fun(this, &Window::new_buffer_thing)
);

_gtk_window().add_accel_group(actions_->get_accel_group());

编译和运行时没有警告,但键盘快捷键不执行任何操作。几个小时以来我一直在摆弄这个,所以任何帮助或指导将不胜感激!

我做错了什么吗?为什么加速器不起作用?

最佳答案

回答这个问题有点晚了,但我今天一直在处理同样的问题,即使在不同的环境中:python、gtk2。

据我对 this tutorial 的一些小实验了解,除非关联到工具箱或菜单栏,否则操作将不会激活。太糟糕了,就这样做吧,将工具栏打包到 VBox 中,并使其不可见,如下所示:

actiongroup = gtk.ActionGroup('window-clip-actions')
accelgroup = gtk.AccelGroup()
fake_toolbar = gtk.Toolbar()
view.get_window().add_accel_group(accelgroup)
view.get_window().get_content_area().pack_start(fake_toolbar)
for shortcut, cb in (('<ctrl><shift>c', self.on_window_clip_copy),
                     ('<ctrl><shift>v', self.on_window_clip_paste)):
    action = gtk.Action(shortcut, shortcut, 'clip-action', None)
    actiongroup.add_action_with_accel(action, shortcut)
    action.connect("activate", cb)
    action.set_accel_group(accelgroup)
    action.connect_accelerator()
    toolitem = action.create_tool_item()
    fake_toolbar.insert(toolitem, -1)
fake_toolbar.set_visible(False)

了解相同的方法是否有助于 OP 会很有趣。

关于c++ - 在 Gtk+ (gtkmm) 中连接关键加速器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19653295/

相关文章:

c++ - 仅为 Qt Creator 中的 Release 构建添加预处理器定义

c++ - 输入参数的格式在 push_back opencv 中不匹配

c# - 单声道 GTK# : Trying to remove text in ComboBox and then prepend new text to the ComboBox but some of the old text remains

ubuntu - 如何在 Ubuntu 20.04 LTS 上安装 libwebkitgtk 包?

keyboard-shortcuts - 剪切/复制/粘贴键盘快捷键在 NSPopover 中不起作用

keyboard-shortcuts - 将 jupyter 笔记本快捷方式重置为默认值

c++ - 规范化约束时,需要表达式是原子吗?

c++ - getline() 在读取最后一行后抛出 basic_ios::clear 异常

c - 使用 Windows 的 Sleep() 时 GTK 窗口停止

java - 调试Java代码时如何跳过循环?