【问题标题】:How do I initialize a GActionMap variable?如何初始化 GActionMap 变量?
【发布时间】:2019-12-07 05:18:15
【问题描述】:

我想知道如何初始化一个 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 变量,而是在 g_action_map_add_action 中使用了 GApplication 变量,它起作用了。

标签: c gtk gobject gio


【解决方案1】:

根据文档,GActionMap 是一个接口 (https://developer.gnome.org/gio/stable/GActionMap.html),例如由 GApplication (https://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));

【讨论】:

    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2017-03-29
    • 2021-02-24
    • 1970-01-01
    相关资源
    最近更新 更多