QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 897|回复: 11

请教一个关于glade的问题??

[复制链接]
发表于 2004-12-31 15:01:34 | 显示全部楼层 |阅读模式
各位,请问一个glade的问题,我使用glade 生成器作了一个glade 界面
我在这个界面中做了二个分页,并且再分别在二分页中做了二个输入框
对二输入框作了同一个enter的快捷键
输入完信息,按回车,就分别找不同的on_1_click和on_2_click函数
执行函数的结果分别写在每一页下面的显示框中,

分别执行:
写入第一页中输入框的信息按enter能够调用on_1_click,
执行的结果写在第一页下面的显示框中  ok

写入第二页中输入框的信息按enter,执行的是on_1_click,结果写在第
一页的显示框中,我想应该是执行on_2_click,结果写在第二页下面的
显示框中.......
函数调用没有错,我在第二页把on_2_click做一个按钮,点击结果就正确了
为什么定义快捷键就有问题,怎么在同一个界面支持二个enter有调用二个不同的函数讷???
不知道大家遇到过这样的问题没有??怎么解决的?
发表于 2004-12-31 16:15:13 | 显示全部楼层
你在第二页的显示代码中用了第一页的显示框指针吧。
回复

使用道具 举报

 楼主| 发表于 2004-12-31 16:28:54 | 显示全部楼层
不是,我是在glade定义的快捷键
在on_1_clicked 下面定义了enter键
在on_2_clicked下面也定义了enter键

刚才我写错了,应该是:
在界面上只要按enter就去执行on_1_clicked,结果写在第一页的显示框中(即使是在第二页按enter也是这样)
我怀疑是不是glade只能定义一个enter呢!即使是enter定义不同的函数中,也是只去找第一个enter
那样的话该怎么处理这个问题讷????
回复

使用道具 举报

发表于 2004-12-31 21:01:10 | 显示全部楼层
贴出interface.c
回复

使用道具 举报

 楼主| 发表于 2005-1-4 13:00:00 | 显示全部楼层
现在这个问题很明了,就是在一个glade界面中不能定义二个enter
如果定义二个第二个就不起作用,点击第二个按钮执行的确实第一个函数的内容!
我都奇怪为什么定义一个enter的话就把它定义成全局的click,(即便是写在函数的下面定义在child里面)
回复

使用道具 举报

发表于 2005-1-4 13:12:01 | 显示全部楼层
你说的快捷键是什么意思?热键?
回复

使用道具 举报

 楼主| 发表于 2005-1-4 13:22:12 | 显示全部楼层
是的,就是回车enter
回复

使用道具 举报

 楼主| 发表于 2005-1-4 13:34:13 | 显示全部楼层
我的情况是这样
在一个输入框输入信息,然后点击一个按钮,就去执行一个函数结果写下面的显示框中
但是,我想让用户输入信息之后,然后enter就去执行函数,写入结果,不用在去点击那个按钮了

但是,这样的话我如果有二个这样的情况的话,在glade一个界面里面定义二个enter就有问题??
我看了redhat所有的glade文件,都是没有这样定义的.....glade这点问题都解决不了
回复

使用道具 举报

发表于 2005-1-4 13:39:04 | 显示全部楼层
不要定义成热键,你可以给输入框定义一个enter事件回调函数,回调函数是不会乱调用的。
回复

使用道具 举报

 楼主| 发表于 2005-1-4 13:53:46 | 显示全部楼层
是的,我现在正在这么解决,但是对gtk不是很熟悉,有这方面的例子没有呢?谢谢了
回复

使用道具 举报

发表于 2005-1-4 14:07:48 | 显示全部楼层
[code:1]
//interface.c
  g_signal_connect ((gpointer) entry1, "key_release_event",
                    G_CALLBACK (on_entry1_key_release_event),
                    entry3);
  g_signal_connect ((gpointer) entry2, "key_release_event",
                    G_CALLBACK (on_entry2_key_release_event),
                    entry3);


//callback.c
gboolean
on_entry1_key_release_event            (GtkWidget       *widget,
                                        GdkEventKey     *event,
                                        gpointer         user_data)
{
    GtkWidget *entry3=(GtkWidget *)user_data;
   
    gtk_entry_set_text(GTK_ENTRY(entry3),gtk_entry_get_text(GTK_ENTRY(widget)));
  return FALSE;
}


gboolean
on_entry2_key_release_event            (GtkWidget       *widget,
                                        GdkEventKey     *event,
                                        gpointer         user_data)
{
    GtkWidget *entry3=(GtkWidget *)user_data;
    gtk_entry_set_text(GTK_ENTRY(entry3),gtk_entry_get_text(GTK_ENTRY(widget)));
  return FALSE;
}
[/code:1]
entry1,entry2,entry3是三个文本输入框,gtk没有直接的enter时间,只有键盘的按下,释放时间,我用的是按键释放事件,但我们在回调函数里可以做一个判断,只有是释放的键是回车时才去做我们的事情,这个判断可以利用那个GdkEventKey     *event来完成。我贴的代码没做这些判断,你自己试试吧。
回复

使用道具 举报

 楼主| 发表于 2005-1-4 14:17:33 | 显示全部楼层
好的,非常感谢了!!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 19:30 , Processed in 0.057208 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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