在entry控件中如何设置只能输入数字?



都好久没有写文章了,因为这段时间刚开始负责一个模块,忙得我自己团团转的,不是模块难,而是自己刚开始负责一个模块,很多事情都没有经验,代码的扩展性和健壮性问题,还有一些脚本问题、系统的接口等等,困惑了我不少时间,自己是一点一点的摸石头过河。不过总算告一段落,结果自己还是满意的。今天在修改BUG的时候,有测试人员提到,要entry里面只能输入数字,问了一下元老级的编程人员,这也是一种编程经验和技巧,在这作一下笔记。
在GTK中,entry或者editable并没有直接接口提供只能输入数字的,但是它有隐藏着一个信号,通过注册这个信号,过滤掉不是数字的字符就OK了。
  1. #include <gtk/gtk.h>

  2. static void  on_entry_insert_text (GtkWidget* entry, gcahr* new_text, int new_text_length, int* position)
  3. {
  4.     if (new_text[0]  > '9'  || new_text [0] < '0')
  5.     {
  6.        new_text[0] = '/0';
  7.    }
  8.  
  9.   return ;
  10. }




  11. int main (int argc, char** argv)
  12. {
  13.     g_type_init ();
  14.     gtk_init(&argc, &argv);

  15.    GtkWidget* window = NULL;
  16.    GtkWidget* vbox = NULL;
  17.    GtkWidget* entry = NULL;

  18.    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  19.    gtk_window_set_title (GTK_WINDOW (window), "entry_test");
  20.   
  21.    vbox = gtk_vbox_new (FALSE, 0);
  22.    gtk_container_add (GTK_CONTAINER (window), vbox);

  23.   entry = gtk_entry_new ();
  24.   gtk_vbox_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 10);
  25.   g_signal_connect (G_OBJECT (entry), "insert-text", G_CALLBACK (on_entry_insert_text), NULL);


  26. gtk_widget_show_all (winodw);

  27. gtk_main ();

  28. return 0;      
  29.  }
通过一个“insert-text”信号去过滤字符串,就可以达到只允许你输入数字的效果了。

~~END~~

你可能感兴趣的:(编程,null,insert,callback,Signal,gtk)