免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4944 | 回复: 4
打印 上一主题 下一主题

GTK+中怎样对已存在widget添加信号? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-23 21:12 |只看该作者 |倒序浏览
比如我要对一个窗口添加一个信号,然后在其他回调函数中触发它。
主函数中:
    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中添加信号呢?

论坛徽章:
0
2 [报告]
发表于 2009-02-26 18:57 |只看该作者
没人理,自己顶一下。

论坛徽章:
0
3 [报告]
发表于 2009-03-01 00:46 |只看该作者
继承GtkWindow写一个新的控件应该是没问题的.也许还有更简单的办法,没有尝试过了.

论坛徽章:
0
4 [报告]
发表于 2009-03-01 12:49 |只看该作者
原帖由 openxing 于 2009-3-1 00:46 发表
继承GtkWindow写一个新的控件应该是没问题的.也许还有更简单的办法,没有尝试过了.

那样很麻烦啊,尤其是用C写……用其他方法绕过了……

论坛徽章:
0
5 [报告]
发表于 2009-08-09 10:40 |只看该作者
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_new的第二个参数是 GType  
G_TYPE_FROM_CLASS (G_OBJECT (window))  你这是干什么?  看名字也知道错了
window是一个instance你用G_TYPE_FROM_CLASS肯定错了 应该用
G_TYPE_FROM_INSTANCE()
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP