如何初始化GActionMap变量?

时间:2019-07-29 20:38:25

标签: 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。

1 个答案:

答案 0 :(得分:2)

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

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

如果链接断开,我在这里复制您应该编写的代码,假设您可以访问GApplication的正确初始化的实例:

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