LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 715|回复: 4

请教:键盘响应和按钮状态同步?

[复制链接]
发表于 2004-12-18 21:33:29 | 显示全部楼层 |阅读模式
我想在 GTK 中将键盘响应和窗口中的按钮按下的状态相结合,就是按下某个健的同时,某个按钮会有被按下的状态。我考虑用 emit signal 来试一下,但没有效果:


  1. #include <gtk/gtk.h>

  2. gint key_press_cb(GtkWidget *widget, GdkEventKey *kevent, gpointer data)  {
  3.     GtkWidget *btn = (GtkWidget *)data;
  4.    
  5.     if(kevent->type == GDK_KEY_PRESS)  {
  6.         g_message("%d, %c;", kevent->keyval, kevent->keyval);
  7.     }

  8.     // void g_signal_emit_by_name(GObject *object, const gchar *name, ... );
  9.     // g_signal_emit_by_name(G_OBJECT(btn), "clicked", NULL);
  10.     g_signal_emit_by_name(G_OBJECT(widget), "clicked", NULL);

  11.     return TRUE;
  12. }

  13. int main(int argc, char *argv[])
  14. {
  15.     GtkWidget *window, *button;

  16.     gtk_init(&argc, &argv);
  17.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  18.     gtk_window_set_default_size(GTK_WINDOW(window), 100, 50);
  19.     g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
  20.     button = gtk_button_new_with_label("OK");
  21.     gtk_container_set_border_width(GTK_CONTAINER(window), 10);
  22.     gtk_container_add(GTK_CONTAINER(window), button);
  23.     gtk_widget_show_all(window);

  24.     // g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(key_press_cb), button);
  25.     g_signal_connect(G_OBJECT(button), "key_press_event", G_CALLBACK(key_press_cb), button);
  26.     gtk_main();
  27.    
  28.     return 0;
  29. }
复制代码


请教高招。

谢谢。
发表于 2004-12-20 09:08:02 | 显示全部楼层
void        gtk_button_pressed              (GtkButton *button);

void        gtk_button_released             (GtkButton *button);
 楼主| 发表于 2004-12-20 21:13:13 | 显示全部楼层
我试过了,替换g_signal_emit_by_name为gtk_button_pressed,但没有效果呀。我看文档,gtk_button_pressed也是emit signal呀?
发表于 2004-12-20 21:31:10 | 显示全部楼层
Post by Chowroc
我试过了,替换g_signal_emit_by_name为gtk_button_pressed,但没有效果呀。我看文档,gtk_button_pressed也是emit signal呀?

你根本没有捕捉到键盘按下的这个事件
不过我也不知道应该怎么做 :ask
 楼主| 发表于 2004-12-20 23:40:07 | 显示全部楼层
我查看了一下源代码,然后用下面的信号发射达到了目的:

  1. g_signal_emit_by_name(G_OBJECT(widget), "activate", NULL);
复制代码

widget就是button.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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