gpt4 book ai didi

将函数连接到 GtkAction

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:56 25 4
gpt4 key购买 nike

我正在尝试使用 C 编写 GTK+3 应用程序。

我创建了一个 glade 文件,其中包含一个 ID 为“tracks_deck.add_empty_track”的操作。

我将操作连接到工具栏项和菜单项。

问题是如何将函数连接到该操作?

我有以下 C 代码:

#include <gtk/gtk.h>
#define UI_FILE "tuxmusicstudio.glade"
#define TOP_WINDOW "application_window"

int main (int argc, char *argv[])
{
GtkWidget *main_window;
GtkBuilder *builder;
GError *error = NULL;

GtkAction *action;

gtk_init (&argc, &argv);

builder = gtk_builder_new();
if (!gtk_builder_add_from_file(builder, UI_FILE, &error)) {
g_critical("couldn't load builder file: %s",error->message);
g_error_free(error);
}

/* create the main, top level, window */
main_window = GTK_WIDGET(gtk_builder_get_object(builder, TOP_WINDOW));
if (!main_window) {
g_critical("widget \"%s\" is missing in file %s.",TOP_WINDOW,UI_FILE);
}

action = GTK_ACTION(gtk_builder_get_object(builder, "tracks_deck.add_empty_track"));
if (!action) {
g_critical("could not fetch action tracks_deck.empty_track");
}

gtk_widget_show_all (main_window);

/* start the main loop, and let it rest there until the application is closed */
gtk_main ();

return 0;

如您所见,我正在尝试获取 GtkAction 以便将函数连接到它。编译器正在编译该行已弃用:

main.c:46:5: warning: ‘gtk_action_get_type’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkaction.h:87) [-Wdeprecated-declarations]
action = GTK_ACTION(gtk_builder_get_object(builder, "tracks_deck.add_empty_track"));
^

那么我如何使用一些未弃用的函数获取 GtkAction。以及如何将 a c 函数连接到该操作?!

如有任何关于此问题的想法,我们将不胜感激。

最佳答案

来自 GtkAction

Description

In GTK+ 3.10, GtkAction has been deprecated. Use GAction instead, and associate actions with GtkActionable widgets. Use GMenuModel for creating menus with gtk_menu_new_from_model().

所以,似乎要走的路是从 GtkAction 切换到 GAction

我见过从 gtk_somethingg_something 的类似移动,例如gtk_signal_connectg_signal_connect

更新:

我四处搜索并没有真正找到好的示例或教程。我找到的唯一片段位于 g_action_map_add_action_entries

static void
activate_quit (GSimpleAction *simple,
GVariant *parameter,
gpointer user_data)
{
exit (0);
}

static void
activate_print_string (GSimpleAction *simple,
GVariant *parameter,
gpointer user_data)
{
g_print ("%s\n", g_variant_get_string (parameter, NULL));
}

static GActionGroup *
create_action_group (void)
{
const GActionEntry entries[] = {
{ "quit", activate_quit },
{ "print-string", activate_print_string, "s" }
};
GSimpleActionGroup *group;

group = g_simple_action_group_new ();
g_action_map_add_action_entries (G_ACTION_MAP (group), entries, G_N_ELEMENTS (entries), NULL);

return G_ACTION_GROUP (group);
}

此示例使用 struct GActionEntry使用 g_action_map_add_action_entries 命名函数/ Action 并将其添加到 Action 组。

关于将函数连接到 GtkAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com