- 论坛徽章:
- 0
|
比如我要对一个窗口添加一个信号,然后在其他回调函数中触发它。
主函数中:
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_new ("signal_error", G_TYPE_FROM_CLASS (G_OBJECT (window)),
G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, 0, NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0
);
g_signal_connect (G_OBJECT (window), "signal_error", G_CALLBACK (show_error), NULL); |
回调函数中:
g_signal_emit_by_name (G_OBJECT (window), "signal_error", NULL); |
其中window是全局的。
可是运行到信号触发时没有触发,却出现警告和断言:
GLib-GObject-CRITICAL **: g_signal_newv: assertion `G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype)' failed
GLib-GObject-WARNING **: gsignal.c:2267: signal `signal_error' is invalid for instance `0x18c0000'
GLib-GObject-WARNING **: invalid (NULL) pointer instance
GLib-GObject-CRITICAL **: g_signal_emit_by_name: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
GLib-GObject-WARNING **: invalid (NULL) pointer instance
GLib-GObject-CRITICAL **: g_signal_emit_by_name: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed |
网上查到的都是过时的代码,或者是自建的widget类型,怎样往已存在的widget中添加信号呢? |
|