QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1177|回复: 8

GTK+太难学了,先问几个小问题,看书看不明白.

[复制链接]
发表于 2004-2-25 17:02:57 | 显示全部楼层 |阅读模式
1.void callback( GtkWidget *widget,
               gpointer   data )
{
    g_print ("Hello again - %s was pressed\n", (gchar *) data);
}
gpoint到底算什么东西,是和C中int,char等一样的吗?为什么输出时是(gchar *) data.
2.如何从窗口中接受数据,不是字符,字符可以用函数
const gchar *gtk_entry_get_text( GtkEntry *entry );但数据用什么函数呢?
3.GtkWidget *entry;
  entry = gtk_entry_new ();
  g_signal_connect (G_OBJECT (entry), "activate",G_CALLBACK(enter_callback),entry);
  void enter_callback( GtkWidget *widget,GtkWidget *entry )
  {
   const gchar *entry_text;
   entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
  }
上面步骤有错吗?为什么在Anjuta下编译的时候老说我最后一行中entry 未定义,undefined,first use,这是为什么吗?
发表于 2004-2-25 21:34:33 | 显示全部楼层
希望以下回答没有误会你的问题。
1. 这个问题麻烦你看一下另一个贴子。本论坛(GTK初学者的问题?看了。。。。。)(http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=54961)
2. 我个人认为要接收其它类型的数据应该自己转换(从gchar* 转换为你想要的类型)。
3. 所有信号的回调函数都有固定的格式。"activate"的回调函数原型格式是  void cb(GtkWidget* ,gpointer) 其中,cb为你定义的函数名,显然,你的类型参数不一致。你的回调函数可能应改为
void enter_callback(GtkWidget* widget, gpointer data){//在第一个参数中GtkEntry* 也可
   const gchar* entry_text;
   entry_text = gtk_entry_get_text (GTK_ENTRY(widget));
}
在这儿,widget才是你的那个文本框。而你在g_signal_connect中的那个entry参数实际上是对应我写的回调函数的data的。

这完全是个人愚见,若有谬处,望各位指出,免误导他(她)人,也能使我受益。
另,谢谢xiaocong213提出这个问题,使我对Gtk的认识有了些微进步。
回复

使用道具 举报

 楼主| 发表于 2004-2-25 22:19:02 | 显示全部楼层
非常感谢sagaeon给我的回答,虽然还不是很明白,但心里已经有点数了,回头好好想想.
对于第一个问题有些抱歉,因为那个贴子我是看到过了,不过那时候我还没开始学GTK+,所以看了之后没有太大的影像了,谢谢指出.
另外想对sagaeon朋友说的是,就目前来说,国内的论坛与国外想比是有些差距,毕竟我们起步较晚,但应该看到我们还是在进步的,这个过程还有很多的困难,我们也正需要像sagaeon这样的朋友来帮助和支持我们,让我们走得更快,也更规范,所谓与国籍接轨吗.如果这当中有什么误会的话希望sagaeon朋友能够谅解.
我们都是因linux而走到一起,也让我们为linux而共同进步吧!
回复

使用道具 举报

发表于 2004-2-25 23:52:35 | 显示全部楼层
gpoint就是void *
那个entry没定义的问题:你包含了头文件<gtk/gtk.h>没有?
回复

使用道具 举报

 楼主| 发表于 2004-2-26 15:37:15 | 显示全部楼层
老实说吧,我是在看GTK+2.0的教程,他上面有这个例子,然后我就想在Anjuta下自己编,弄好图形界面后开始来编回调函数了,我是直接把例子上的回调函数拷贝到Anjuta下的callbacl.c中的,可在创建项目的时候就出现上面说的问题,说entry未定义,编译通不过,
回复

使用道具 举报

发表于 2004-2-26 17:00:26 | 显示全部楼层
对Gtk问题及论坛发展的一点拙劣的建议:

1. 对xiaocong213的问题的一点个人意见。首先,在anjuta下编图形界面,glade会自动生成回调函数,它的参数应该是(GtkWidget*,gpointer),至于是否有其它情况,很抱歉,我没有相关资料说明这个问题,就我认为没有(望热心人指出)。对xiaocong213直接复制的方法,是嫌不妥?其次,xiaocong213用anjuta生成的g_signal_connect (G_OBJECT (entry), "activate",G_CALLBACK(enter_callback),entry)中,请问是否最后一个参数是entry还是NULL,如是NULL说明你在用glade设置回调函数时在“对象”这一栏是空的,你应填上“entry"才能和你所看的书对应上。

2. 论坛的发展要大家的坦诚。xiaocong213(及大家)下次可别留一手,这样或许大家会完全误会你的问题。如果花了自己陪女朋友的时间来回答大家的问题,却不能给别人带来任何帮助,会让大家缺乏成就感(毕竟,不为钱和名,只望能微明世界)。同时感谢mozilla能在多处看见你的身影,应该评个热心奖。

3. 论坛有许多对技术理解非常深刻的开发者,望能不吝宝贵时间,对我等有所指点,毕竟独乐乐不如众乐乐!

祝本贴的xiaocong213,mozilla快乐!
回复

使用道具 举报

 楼主| 发表于 2004-2-26 22:18:18 | 显示全部楼层
今天晚上想了好长时间还是没想明白,唉,真是笨那.
下点决心在没弄明白之前不再对GTK+问题发表意见,(或许永远都搞不明白,但私下里可以请教,要不然真的会弄不明白的).
回复

使用道具 举报

发表于 2004-4-22 00:09:58 | 显示全部楼层
gtk+很难吗?如果你用过windows32 API编程(不是MFC)的话,应该很容易理解,,祝你好运
回复

使用道具 举报

发表于 2004-5-5 13:57:12 | 显示全部楼层
GTK+是一个连书都不用看的好东西,
很简单的,
只需要看一下他的头文件,再稍微看一下一点点资料,就能马上脱离书本自己看着编了
当然,得需要c的基础啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 11:15 , Processed in 0.051185 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表