|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这一讲讲解GTK中的输入部件,输入部件包括文本输入,数值选择,以及文本列表选择。这里将选择部件作为输入部件看待,GUI设计原则就是能让用户选的东西绝不要让用户输入,输入增加了操作的繁琐型及增大了系统的出错可能(用户输入未预期的值)。
效果图:
- #include <gtk/gtk.h>
- void get_name_click(GtkButton *button,gpointer user_data)
- {
- guint16 length = 0;
- const gchar *name;
- length = gtk_entry_get_text_length(user_data);
- if(length)
- {
- name = gtk_entry_get_text(user_data);
- g_print("input name is: %s\n", name);
- }
- else
- {
- g_print("input empty!\n");
- }
- }
- void search_click(GtkButton *button,gpointer user_data)
- {
- const gchar *keyword = gtk_entry_get_text(user_data);
- g_print("input word is: %s\n", keyword);
- }
- void cb_text_select(GtkComboBox *widget,gpointer user_data)
- {
- gchar *value = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
- g_print("you selected value is: %s\n", value);
- }
- int main(int argc,char *argv[ ])
- {
- GtkWidget *window,*fixed;
- GtkWidget *entry_name,*label_name,*button_name;
- GtkWidget *entry_search,*label_search,*button_search;
- GtkWidget *mult_text;
- GtkWidget *scale,*spinner;
- GtkWidget *label_select,*cb_text;
- gtk_init(&argc,&argv);
- window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window),"hello fishc - for input");
- gtk_widget_set_size_request(GTK_WIDGET(window),300,300);
- fixed = gtk_fixed_new();
- gtk_container_add(GTK_CONTAINER(window), fixed);
- label_name = gtk_label_new("Name: ");
- entry_name = gtk_entry_new();
- button_name = gtk_button_new_with_label("get name");
- g_signal_connect(GTK_WIDGET(button_name), "clicked", G_CALLBACK(get_name_click), entry_name);
- gtk_fixed_put(GTK_FIXED(fixed), label_name, 5,22);
- gtk_fixed_put(GTK_FIXED(fixed), entry_name, 50,20);
- gtk_fixed_put(GTK_FIXED(fixed), button_name, 220,16);
- label_search = gtk_label_new("Search: ");
- entry_search = gtk_search_entry_new();
- button_search = gtk_button_new_with_label("search");
- g_signal_connect(GTK_WIDGET(button_search), "clicked", G_CALLBACK(search_click), entry_search);
- gtk_entry_set_icon_from_stock(GTK_ENTRY(entry_search), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_FIND);
- gtk_fixed_put(GTK_FIXED(fixed), label_search, 5,52);
- gtk_fixed_put(GTK_FIXED(fixed), entry_search, 50,50);
- gtk_fixed_put(GTK_FIXED(fixed), button_search, 220,46);
- mult_text = gtk_text_view_new();
- gtk_widget_set_size_request(GTK_WIDGET(mult_text),290,100);
- gtk_fixed_put(GTK_FIXED(fixed), mult_text, 5,80);
- scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0,100,1);
- gtk_widget_set_size_request(GTK_WIDGET(scale),100,1);
- gtk_fixed_put(GTK_FIXED(fixed), scale, 5,180);
- spinner = gtk_spin_button_new_with_range(0,10,1);
- gtk_fixed_put(GTK_FIXED(fixed), spinner, 125,195);
- label_select = gtk_label_new("Please select an item: ");
- gtk_fixed_put(GTK_FIXED(fixed), label_select, 5,230);
- cb_text = gtk_combo_box_text_new();
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cb_text), "aaaaa");
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cb_text), "bbb");
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cb_text), "cccc");
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cb_text), "ffff");
- g_signal_connect(GTK_WIDGET(cb_text), "changed", G_CALLBACK(cb_text_select), NULL);
- gtk_fixed_put(GTK_FIXED(fixed), cb_text, 150,225);
- gtk_widget_show_all(window);
- gtk_main();
- return 0;
- }
复制代码
其中的GtkScale和GtkSpinButton在按钮部件那一讲说过的,这里就不再赘述。GtkScale和GtkVolumeButton一样的。
GtkEntry
GtkEntry是一个单行文本输入部件,可以用来让用户输入一些字符串数据,如:用户名,密码,这些。
默认输入的文本是明文显示的,如果要输入密码,通过gtk_entry_set_visibility函数设置输入字符以掩码方式显示,这个函数需要两个参数,第一个是GtkEntry部件,第二个是设置是否显示的布尔值参数。通过gtk_entry_get_text_length函数可以获取输入框中字符个数,可以用来判断输入是否为空。
gtk_entry_get_text函数用来获取用户输入的文本信息。
GtkSearchEntry
GtkSearchEntry和GtkEntry是一样的,它“继承”于GtkEntry,不过默认状态下显示一个图标,这个图标通过gtk_entry_set_icon_from_stock函数设置,stock还是之前提到的预定义图标。
gtk_entry_set_icon_from_stock函数有三个参数:
第一个是GtkEntry部件,第二个是图标显示位置,可以为首部显示或尾部显示,其值为枚举:
- typedef enum {
- GTK_ENTRY_ICON_PRIMARY,
- GTK_ENTRY_ICON_SECONDARY
- } GtkEntryIconPosition;
复制代码 第三个参数为显示的stockid,是一些定义过的宏,直接拿来用即可。
GtkTextView
GtkTextView也是文本输入框,和GtkEntry的不同之处在于它可以输入多行文本。默认情况下是不现实滚动条的,会自扩展高度,如果要显示滚动条,把它放到可以滚动的布局部件(GtkScrolledWindow)里即可,在前面讲布局部件时提到过。
GtkComboBoxText
GtkComboBoxText是一个简单的只读组合框,比较常用,用来为用户提供一组预期值选择。例如:要输入一个月份,可以把12个月份放入这个部件供用户选择。
gtk_combo_box_text_append_text函数用来为组合框添加文本项,这个函数有两个参数,第一个为组合框部件,第二个为要添加的文本,以追加方式添加到组合框的项列表中。
另外提供gtk_combo_boc_text_insert函数用来插入值,可以插入到项列表的不同位置。通过第二个参数position指定插入在哪个索引项后面。
通过注册 changed 信号来获取组合框选择项改变通知。
这一讲就简单地说这么多,下一讲讲解GTK中的对话框(dialog)。
|
|