- 论坛徽章:
- 0
|
昨天在做一个关于GTK TREE的例子,但是在编译的时候,出错了,
错误内容是:
- tree.c|142| 错误:‘GTK_TREE_VIEW_ITEM’未声明(在此函数内第一次使用)
复制代码
下面是程序源码:
- /**
- * tree.c
- *
- * */
- #include <gtk/gtk.h>
- static void cb_itemsignal(GtkWidget *item, gchar *signame)
- {
- gchar *name;
- GtkLabel *label;
- label = GTK_LABEL(GTK_BIN(item)->child);
- gtk_label_get(label,&name);
- g_print("%s called for item %s, level %d\n",
- signame, name, GTK_TREE(item->parent)
- );
- }
- static void cb_select_child(GtkWidget *root_tree,
- GtkWidget *child,
- GtkWidget *subtree)
- {
- g_print("select_child called\n");
- }
- static void cb_unselect_child(GtkWidget *root_tree,
- GtkWidget *child,
- GtkWidget *subtree)
- {
- g_print("unselect_child called\n");
- }
- static void cb_selection_changed(GtkWidget *tree)
- {
- GList *i;
- i = GTK_TREE_SELECTION(tree);
- while( i )
- {
- gchar *name;
- GtkWidget *label;
- GtkWidget *item;
- item = GTK_WIDGET(i->data);
- label = GTK_LABEL(GTK_BIN(item)->child);
- gtk_label_get(label, &name);
- g_print("selected : %s on level %d\n", name, GTK_TREE(item->parent));
- i = i->next;
- }
- }
- int main(int argc, char *argv[])
- {
- int i;
- GtkWidget *window;
- GtkWidget *vbox, *hbox;
- GtkWidget *root_tree, *tree;
- GtkWidget *root_item;
- GtkWidget *subtree, *item, *subitem;
- GtkWidget *scrolled_window;
- static char *hardware[3] = {
- "键盘",
- "鼠标",
- "硬盘"
- };
- static char *software[2] = {
- "GIMP",
- "MTV"
- };
- gtk_set_locale();
- gtk_init(&argc,&argv);
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_usize(window,400,250);
- gtk_window_set_title(GTK_WINDOW(window),"GtkTree 演示");
- g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
- vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(vbox),5);
- gtk_container_add(GTK_CONTAINER(window),vbox);
- gtk_widget_show(vbox);
- scrolled_window = gtk_scrolled_window_new(NULL,NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),GTK_POLICY_AUTOMATIC,GTK_POLICY_ALWAYS);
- //###
- gtk_container_add(GTK_CONTAINER(vbox),scrolled_window);
- gtk_widget_show(scrolled_window);
- //建立树根
- root_tree = gtk_tree_new();
- g_signal_connect(G_OBJECT(root_tree), "select_child",GTK_SIGNAL_FUNC(cb_select_child),root_tree);
- g_signal_connect(G_OBJECT(root_tree), "unselect_child",G_CALLBACK(cb_unselect_child),root_tree);
- g_signal_connect(G_OBJECT(root_tree), "selection_changed",G_CALLBACK(cb_selection_changed),root_tree);
-
- //把TREE加到滚动窗口中
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),root_tree);
- gtk_widget_show(root_tree);
- //树的label
- root_item = gtk_tree_item_new_with_label("计算机");
- g_signal_connect(G_OBJECT(root_item),"select",G_CALLBACK(cb_itemsignal),"select");
- g_signal_connect(G_OBJECT(root_item),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
- g_signal_connect(G_OBJECT(root_item),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
- g_signal_connect(G_OBJECT(root_item),"expand",G_CALLBACK(cb_itemsignal),"expand");
- g_signal_connect(G_OBJECT(root_item),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
- gtk_tree_append(GTK_TREE(root_tree),root_item);
- //子树
- tree = gtk_tree_new();
- g_signal_connect(G_OBJECT(tree),"select_child",G_CALLBACK(cb_select_child),tree);
- g_signal_connect(G_OBJECT(tree),"unselect_child",G_CALLBACK(cb_unselect_child),tree);
- g_signal_connect(G_OBJECT(tree),"selection_changed",G_CALLBACK(cb_selection_changed),tree);
- gtk_widget_show(tree);
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(root_item),tree);
- //加入两个树枝
- //
- item = gtk_tree_item_new_with_label("硬件");
- g_signal_connect(G_OBJECT(item),"select",G_CALLBACK(cb_itemsignal),"select");
- g_signal_connect(G_OBJECT(item),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
- g_signal_connect(G_OBJECT(item),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
- g_signal_connect(G_OBJECT(item),"expand",G_CALLBACK(cb_itemsignal),"expand");
- g_signal_connect(G_OBJECT(item),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
- //加入到parent中
- gtk_tree_append(GTK_TREE(tree),item);
- gtk_widget_show(item);
- //树枝
- subtree = gtk_tree_new();
- g_signal_connect(G_OBJECT(subtree),"select_child",G_CALLBACK(cb_select_child),subtree);
- g_signal_connect(G_OBJECT(subtree),"unselect_child",G_CALLBACK(cb_unselect_child),subtree);
- g_signal_connect(G_OBJECT(subtree),"selection_changed",G_CALLBACK(cb_selection_changed),subtree);
- gtk_tree_set_selection_mode(GTK_TREE(subtree),GTK_SELECTION_SINGLE);
- gtk_tree_set_view_mode(GTK_TREE(subtree),GTK_TREE_VIEW_ITEM);
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(item),subtree);
- //树叶
- for( i = 0 ; i < 3 ; i++ )
- {
- subitem = gtk_tree_item_new_with_label(hardware[i]);
- g_signal_connect(G_OBJECT(subitem),"select",G_CALLBACK(cb_itemsignal),"select");
- g_signal_connect(G_OBJECT(subitem),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
- g_signal_connect(G_OBJECT(subitem),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
- g_signal_connect(G_OBJECT(subitem),"expand",G_CALLBACK(cb_itemsignal),"expand");
- g_signal_connect(G_OBJECT(subitem),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
- gtk_tree_append(GTK_TREE(subtree),subitem);
- gtk_widget_show(subitem);
- }
-
- //另外一个树枝
- item = gtk_tree_item_new_with_label("软件");
- g_signal_connect(G_OBJECT(item),"select",G_CALLBACK(cb_itemsignal),"select");
- g_signal_connect(G_OBJECT(item),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
- g_signal_connect(G_OBJECT(item),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
- g_signal_connect(G_OBJECT(item),"expand",G_CALLBACK(cb_itemsignal),"expand");
- g_signal_connect(G_OBJECT(item),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
- gtk_tree_append(GTK_TREE(tree),item);
- gtk_widget_show(item);
- subtree = gtk_tree_new();
- g_signal_connect(G_OBJECT(subtree),"select_child",G_CALLBACK(cb_select_child),subtree);
- g_signal_connect(G_OBJECT(subtree),"unselect_child",G_CALLBACK(cb_unselect_child),subtree);
- g_signal_connect(G_OBJECT(subtree),"selection_changed",G_CALLBACK(cb_selection_changed),subtree);
- gtk_tree_set_selection_mode(GTK_TREE(subtree),GTK_TREE_VIEW_ITEM);
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(item),subtree);
- //树叶
- for( i = 0 ; i < 2 ; i++ )
- {
- subitem = gtk_tree_item_new_with_label(software[i]);
- g_signal_connect(G_OBJECT(subitem),"select",G_CALLBACK(cb_itemsignal),"select");
- g_signal_connect(G_OBJECT(subitem),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
- g_signal_connect(G_OBJECT(subitem),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
- g_signal_connect(G_OBJECT(subitem),"expand",G_CALLBACK(cb_itemsignal),"expand");
- g_signal_connect(G_OBJECT(subitem),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
- gtk_tree_append(GTK_TREE(subtree),subitem);
- gtk_widget_show(subitem);
- }
- gtk_widget_show(window);
- gtk_main();
- return 0;
-
- }
复制代码
我感到奇怪的是明明gtk/gtk.h中包含的gtk/gtktree.h文件里面有这个变量,为什么在编译的时候,还会找不到呢?(我用的automake 来生成的makefile文件)
再上一张文件示截图
|
|