например, прием сигнала GLib-GObject-WARNING «активировать» недействителен - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь создать простой виджет Меню с GTK3 +, программа соответствует, но я получаю это предупреждение во время выполнения:

(menu: 2320): GLib-GObject-WARNING **: 11:40:48.620: ../../../gobject/gsignal.c:2523: signal 'activate' is invalid for instance '0x557d45672290' of type 'GtkWindow'

#include <gtk/gtk.h>

static void activate_about(GtkWidget *window, gpointer data);

int main(int argc, char *argv[]) {

    GtkWidget *window;
    GtkWidget *vbox;

    GtkWidget *menubar;
    GtkWidget *fileMenu;
    GtkWidget *fileMi;
    GtkWidget *quitMi;
    GtkWidget *about;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
    gtk_window_set_title(GTK_WINDOW(window), "Simple menu");

    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
    gtk_container_add(GTK_CONTAINER(window), vbox);

    menubar = gtk_menu_bar_new();
    fileMenu = gtk_menu_new();

    fileMi = gtk_menu_item_new_with_label("File");
    quitMi = gtk_menu_item_new_with_label("Quit");
    about = gtk_menu_item_new_with_label("About");

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);
    gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), about);
    gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi);
    gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi);
    gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);

    g_signal_connect(G_OBJECT(window), "destroy",
    G_CALLBACK(gtk_main_quit), NULL);

    g_signal_connect(G_OBJECT(quitMi), "activate",
    G_CALLBACK(gtk_main_quit), NULL);

    g_signal_connect(G_OBJECT(window), "activate",
    G_CALLBACK(activate_about), NULL);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}

static void activate_about(GtkWidget *window, gpointer data) {

    const gchar *authors[] = {"ad Chi", NULL};

    gtk_show_about_dialog(GTK_WINDOW(window),
                    "program-name", "jjkjk",
                    "version", "0.0.1",
                    "copyright", "(C) 2017 ad Chi",
                    "license-type", GTK_LICENSE_GPL_3_0,
                    "website", "https://github.com/kjk",
                    "comments", "Totally kj",
                    "authors", authors,
                    "documenters", NULL,
                    "logo-icon-name", "start-here",
                    "title", "About kj kj",
                    NULL);

    return;
}

Я сбит с толку это предупреждения. Может кто-нибудь объяснить, как я мог их вызвать, и как они могли бы быть отлажены в GDB? Я пытался использовать G_DEBUG = fatal-warnings ./a.out, но это не очень информативно.

1 Ответ

1 голос
/ 03 апреля 2020

Вы подключаете обработчик activate_about к экземпляру window, а не к элементу меню about. GtkWindow не имеет сигнала activate.

Кроме того, вам не нужно приводить первый аргумент g_signal_connect() к GObject.

...