Kaz*_*ade 5 c++ gtk keyboard-shortcuts gtkmm
我一直在使用 gtkmm 编写 Gtk+ 应用程序,并且我正在尝试添加一个全局键盘快捷键来调用回调。不幸的是,gtkmm 中没有 Gtk::AccelGroup 的 connect() 方法,这显然是故意的,因为您可以使用 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());
Run Code Online (Sandbox Code Playgroud)
它在没有警告的情况下编译和运行,但键盘快捷键什么也不做。我一直在摆弄这个好几个小时,所以任何帮助或指导将不胜感激!
我做错了什么吗?为什么加速器不起作用?
回答这个问题有点晚了,但我今天一直在解决同样的问题,即使在不同的环境中:python,gtk2。
据我通过对本教程的一些实验了解到,除非与工具箱或菜单栏相关联,否则操作不会处于活动状态。太糟糕了,就这样做,将工具栏打包到 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)
Run Code Online (Sandbox Code Playgroud)
知道同样的方法是否对OP有帮助会很有趣。
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |