Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
接收GLib GObject警告信号';激活&x27;例如,它是无效的_C_Gtk3 - Fatal编程技术网

接收GLib GObject警告信号';激活&x27;例如,它是无效的

接收GLib GObject警告信号';激活&x27;例如,它是无效的,c,gtk3,C,Gtk3,我正在尝试使用GTK3+创建一个简单的菜单小部件,程序符合要求,但在运行时收到以下警告: (菜单:2320):GLib GObject警告**:11:40:48.620:../../../../GObject/gsignal.c:2523:信号“激活”对于类型为“GtkWindow”的示例“0x557d45672290”无效。 #include <gtk/gtk.h> static void activate_about(GtkWidget *window, gpointer da

我正在尝试使用GTK3+创建一个简单的菜单小部件,程序符合要求,但在运行时收到以下警告:

(菜单:2320):GLib GObject警告**:11:40:48.620:../../../../GObject/gsignal.c:2523:信号“激活”对于类型为“GtkWindow”的示例“0x557d45672290”无效。

#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;
}
#包括
静态无效激活_about(GtkWidget*窗口,gpointer数据);
int main(int argc,char*argv[]){
GtkWidget*窗口;
GtkWidget*vbox;
GtkWidget*菜单栏;
GtkWidget*文件菜单;
GtkWidget*fileMi;
GtkWidget*quitMi;
GtkWidget*about;
gtk_init(&argc,&argv);
窗口=gtk_窗口_新建(gtk_窗口_顶层);
gtk_窗口设置位置(gtk_窗口(窗口)、gtk_WIN_位置中心);
gtk_窗口设置默认大小(gtk_窗口(窗口),300,200);
gtk_窗口_设置_标题(gtk_窗口(窗口),“简单菜单”);
vbox=gtk_盒_新(gtk_方向_垂直,12);
gtk_容器添加(gtk_容器(窗口),vbox);
菜单栏=gtk_菜单栏_新建();
fileMenu=gtk_menu_new();
fileMi=gtk_菜单_项_新_,带有标签(“文件”);
quitMi=gtk_菜单_项_新_,带有标签(“退出”);
关于=gtk_菜单_项_新_,带有标签(“关于”);
gtk_菜单项设置子菜单(gtk_菜单项(fileMi),fileMenu);
gtk_menu_shell_append(gtk_menu_shell(fileMenu)),关于;
gtk_menu_shell_append(gtk_menu_shell(fileMenu),quitMi);
gtk_menu_shell_append(gtk_menu_shell(menubar),fileMi);
gtk_-box_-pack_启动(gtk_-box(vbox),菜单栏,假,假,0);
g_信号连接(g_对象(窗口),“销毁”,
G_回调(gtk_main_quit),NULL);
g_信号连接(g_对象(quitMi),“激活”,
G_回调(gtk_main_quit),NULL);
g_信号连接(g_对象(窗口),“激活”,
G_回调(activate_about),空);
gtk_小部件_全部显示(窗口);
gtk_main();
返回0;
}
静态无效激活关于(GtkWidget*窗口,gpointer数据){
const gchar*作者[]={“ad Chi”,NULL};
gtk_显示关于_对话框(gtk_窗口(窗口)),
“程序名”,“jjkjk”,
“版本”、“0.0.1”,
“版权所有”,“(C)2017年广告宣传”,
“许可证类型”,GTK_许可证GPL_3_0,
“网站”https://github.com/kjk",
“评论”,“完全正确”,
“作者”,作者,
“资料员”,空,
“徽标图标名称”,“从这里开始”,
“标题”,“关于kj”,
无效);
返回;
}
我被这些警告弄糊涂了。谁能解释一下我是如何触发它们的,以及如何在gdb中调试它们的?我试图使用G_DEBUG=致命警告。/a.out
但是它的信息量不大。

您正在将
activate_about
处理程序连接到
窗口
实例,而不是将其连接到
about
菜单项。
GtkWindow
没有
activate
信号


此外,当您在调试器中运行程序并单步执行时,您不需要将
g\u signal\u connect()
的第一个参数强制转换为
GObject

,哪一行会导致此消息?假设您有一只名叫Rex的狗和一个名叫Tim的朋友。他们俩都在外面的花园里,你叫蒂姆在里面,但你和狗在一起的不是蒂姆。为什么会这样?GtkWindow没有激活信号。查看其文档->。如果需要打开对话框,则不是这样做的。我在Youtube频道上有一个关于对话的播放列表。=>>正确的调用是:g_signal_connect(窗口“destroy”,gtk_main_quit,NULL);和g_signal_connect(quitMi,“activate”,g_CALLBACK(activate_about),NULL):但它们不会修复您的对话方法。因为现在退出按钮运行对话框。是的,他正试图监控来自的信号。他可能需要
g\u信号\u连接\u交换(关于“激活”,g\u回调(激活\u关于),窗口)