c - 如何初始化 GActionMap 变量?

标签 c gtk gobject gio

我想知道如何初始化 GActionMap 变量。

我在这里搜索https://developer.gnome.org/gio/stable/GActionMap.html来查找实例化 GActionMap 的函数,但我没有在那里找到它。

我试图在我的应用程序中插入一些操作来使用该功能 item = g_menu_item_new(labelItem, "sair"); 其中 item 是菜单项,labelItem 是菜单项标签,sair 是我要在单击该项目时触发的函数名称。

但是当我运行代码时,我收到“段错误”,该错误专门在 g_action_map_add_action(grupo, G_ACTION(acao)); 中停止执行:

    GSimpleAction *acao;
    GActionMap *grupo;

    acao = g_simple_action_new("sair", NULL);
    g_signal_connect(
        G_OBJECT(acao), "activate", G_CALLBACK(sair), window);

    g_action_map_add_action(grupo, G_ACTION(acao));
    gtk_widget_insert_action_group(
        window, "grupo", G_ACTION_GROUP(grupo));

window 是应用程序窗口。

消息错误如下:

GLib-GObject-CRITICAL **: 17:01:01.711: g_type_interface_peek: assertion 'instance_class != NULL' failed
[1]    11396 segmentation fault (core dumped)

我使用的是 gtk4。

最佳答案

根据文档,GActionMap 是一个接口(interface) ( https://developer.gnome.org/gio/stable/GActionMap.html ),例如由 GApplication ( https://developer.gnome.org/gio/stable/GApplication.html ) 实现。

因此,您应该将 GApplication 实例(或实现接口(interface) GActionMap 的其他类型)传递给函数,就像本教程中所做的那样:https://developer.gnome.org/GAction/对于类似的用例(不同的功能,相同的输入)。

如果链接断开,我会在此处复制您应该编写的代码,假设您有权访问正确初始化的 GApplication 实例:

GApplication * app = ...
...some other code ...
g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(acao));

关于c - 如何初始化 GActionMap 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57261076/

相关文章:

c - 从一行中提取一个短语

c - 嵌套宏 : Order of Expansion

c - 如何在linux中用C程序映射两个端口

python - 在使用 Glade 创建的 Python GTK3 程序中导入 CSS 文件

python - 在 gtk3+ for python 中如何获取选定的菜单项或选定的菜单项的索引?

c - 从文本文件到二维整数数组的读取和处理,中间有语句

python - 在 GTK+ (linux) 中实现类似 facebook 的模式对话框

python - centOs 7在搜索依赖项时找不到python3-PyYAML和python3-gobject

binding - 使用 GIR 为 D 绑定(bind) gobject/gnome/glib?

gtk - 是否可以在不使用 GObject 样式构造的情况下扩展基本 Gtk 小部件?