免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1889 | 回复: 0
打印 上一主题 下一主题

关于gtk树的例子出错?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-24 13:35 |只看该作者 |倒序浏览
昨天在做一个关于GTK TREE的例子,但是在编译的时候,出错了,
错误内容是:
  1. tree.c|142| 错误:‘GTK_TREE_VIEW_ITEM’未声明(在此函数内第一次使用)
复制代码

下面是程序源码:
  1. /**
  2. * tree.c
  3. *
  4. * */
  5. #include    <gtk/gtk.h>

  6. static void cb_itemsignal(GtkWidget *item, gchar *signame)
  7. {
  8.     gchar       *name;
  9.     GtkLabel    *label;

  10.     label       =   GTK_LABEL(GTK_BIN(item)->child);
  11.     gtk_label_get(label,&name);
  12.     g_print("%s called for item %s, level %d\n",
  13.             signame, name, GTK_TREE(item->parent)
  14.             );

  15. }

  16. static void cb_select_child(GtkWidget *root_tree,
  17.         GtkWidget *child,
  18.         GtkWidget *subtree)
  19. {
  20.     g_print("select_child called\n");
  21. }

  22. static void cb_unselect_child(GtkWidget *root_tree,
  23.         GtkWidget *child,
  24.         GtkWidget *subtree)
  25. {
  26.     g_print("unselect_child called\n");
  27. }

  28. static void cb_selection_changed(GtkWidget *tree)
  29. {
  30.     GList   *i;

  31.     i   =   GTK_TREE_SELECTION(tree);
  32.     while( i )
  33.     {
  34.         gchar       *name;
  35.         GtkWidget   *label;
  36.         GtkWidget   *item;

  37.         item        =   GTK_WIDGET(i->data);
  38.         label       =   GTK_LABEL(GTK_BIN(item)->child);
  39.         gtk_label_get(label, &name);
  40.         g_print("selected : %s on level %d\n", name, GTK_TREE(item->parent));
  41.         i           =   i->next;
  42.     }
  43. }

  44. int main(int argc, char *argv[])
  45. {
  46.     int         i;
  47.     GtkWidget   *window;
  48.     GtkWidget   *vbox, *hbox;
  49.     GtkWidget   *root_tree, *tree;
  50.     GtkWidget   *root_item;
  51.     GtkWidget   *subtree, *item, *subitem;
  52.     GtkWidget   *scrolled_window;

  53.     static char *hardware[3]    =   {
  54.         "键盘",
  55.         "鼠标",
  56.         "硬盘"
  57.     };
  58.     static char *software[2]    =   {
  59.         "GIMP",
  60.         "MTV"
  61.     };


  62.     gtk_set_locale();
  63.     gtk_init(&argc,&argv);

  64.     window      =   gtk_window_new(GTK_WINDOW_TOPLEVEL);
  65.     gtk_widget_set_usize(window,400,250);
  66.     gtk_window_set_title(GTK_WINDOW(window),"GtkTree 演示");
  67.     g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

  68.     vbox        =   gtk_vbox_new(FALSE, 5);
  69.     gtk_container_set_border_width(GTK_CONTAINER(vbox),5);
  70.     gtk_container_add(GTK_CONTAINER(window),vbox);
  71.     gtk_widget_show(vbox);

  72.     scrolled_window =   gtk_scrolled_window_new(NULL,NULL);
  73.     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),GTK_POLICY_AUTOMATIC,GTK_POLICY_ALWAYS);
  74.     //###
  75.     gtk_container_add(GTK_CONTAINER(vbox),scrolled_window);

  76.     gtk_widget_show(scrolled_window);

  77.     //建立树根
  78.     root_tree       =   gtk_tree_new();
  79.     g_signal_connect(G_OBJECT(root_tree), "select_child",GTK_SIGNAL_FUNC(cb_select_child),root_tree);
  80.     g_signal_connect(G_OBJECT(root_tree), "unselect_child",G_CALLBACK(cb_unselect_child),root_tree);
  81.     g_signal_connect(G_OBJECT(root_tree), "selection_changed",G_CALLBACK(cb_selection_changed),root_tree);
  82.    
  83.     //把TREE加到滚动窗口中
  84.     gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),root_tree);
  85.     gtk_widget_show(root_tree);

  86.     //树的label
  87.     root_item       =   gtk_tree_item_new_with_label("计算机");
  88.     g_signal_connect(G_OBJECT(root_item),"select",G_CALLBACK(cb_itemsignal),"select");
  89.     g_signal_connect(G_OBJECT(root_item),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
  90.     g_signal_connect(G_OBJECT(root_item),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
  91.     g_signal_connect(G_OBJECT(root_item),"expand",G_CALLBACK(cb_itemsignal),"expand");
  92.     g_signal_connect(G_OBJECT(root_item),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
  93.     gtk_tree_append(GTK_TREE(root_tree),root_item);

  94.     //子树
  95.     tree            =   gtk_tree_new();
  96.     g_signal_connect(G_OBJECT(tree),"select_child",G_CALLBACK(cb_select_child),tree);
  97.     g_signal_connect(G_OBJECT(tree),"unselect_child",G_CALLBACK(cb_unselect_child),tree);
  98.     g_signal_connect(G_OBJECT(tree),"selection_changed",G_CALLBACK(cb_selection_changed),tree);

  99.     gtk_widget_show(tree);
  100.     gtk_tree_item_set_subtree(GTK_TREE_ITEM(root_item),tree);

  101.     //加入两个树枝
  102.     //
  103.     item            =   gtk_tree_item_new_with_label("硬件");
  104.     g_signal_connect(G_OBJECT(item),"select",G_CALLBACK(cb_itemsignal),"select");
  105.     g_signal_connect(G_OBJECT(item),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
  106.     g_signal_connect(G_OBJECT(item),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
  107.     g_signal_connect(G_OBJECT(item),"expand",G_CALLBACK(cb_itemsignal),"expand");
  108.     g_signal_connect(G_OBJECT(item),"collapse",G_CALLBACK(cb_itemsignal),"collapse");

  109.     //加入到parent中
  110.     gtk_tree_append(GTK_TREE(tree),item);
  111.     gtk_widget_show(item);

  112.     //树枝
  113.     subtree         =   gtk_tree_new();
  114.     g_signal_connect(G_OBJECT(subtree),"select_child",G_CALLBACK(cb_select_child),subtree);
  115.     g_signal_connect(G_OBJECT(subtree),"unselect_child",G_CALLBACK(cb_unselect_child),subtree);
  116.     g_signal_connect(G_OBJECT(subtree),"selection_changed",G_CALLBACK(cb_selection_changed),subtree);
  117.     gtk_tree_set_selection_mode(GTK_TREE(subtree),GTK_SELECTION_SINGLE);
  118.     gtk_tree_set_view_mode(GTK_TREE(subtree),GTK_TREE_VIEW_ITEM);
  119.     gtk_tree_item_set_subtree(GTK_TREE_ITEM(item),subtree);
  120.     //树叶
  121.     for( i = 0 ; i < 3 ; i++ )
  122.     {
  123.         subitem     =   gtk_tree_item_new_with_label(hardware[i]);
  124.         g_signal_connect(G_OBJECT(subitem),"select",G_CALLBACK(cb_itemsignal),"select");
  125.         g_signal_connect(G_OBJECT(subitem),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
  126.         g_signal_connect(G_OBJECT(subitem),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
  127.         g_signal_connect(G_OBJECT(subitem),"expand",G_CALLBACK(cb_itemsignal),"expand");
  128.         g_signal_connect(G_OBJECT(subitem),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
  129.         gtk_tree_append(GTK_TREE(subtree),subitem);
  130.         gtk_widget_show(subitem);
  131.     }
  132.    
  133.     //另外一个树枝
  134.     item            =   gtk_tree_item_new_with_label("软件");
  135.     g_signal_connect(G_OBJECT(item),"select",G_CALLBACK(cb_itemsignal),"select");
  136.     g_signal_connect(G_OBJECT(item),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
  137.     g_signal_connect(G_OBJECT(item),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
  138.     g_signal_connect(G_OBJECT(item),"expand",G_CALLBACK(cb_itemsignal),"expand");
  139.     g_signal_connect(G_OBJECT(item),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
  140.     gtk_tree_append(GTK_TREE(tree),item);
  141.     gtk_widget_show(item);

  142.     subtree         =   gtk_tree_new();
  143.     g_signal_connect(G_OBJECT(subtree),"select_child",G_CALLBACK(cb_select_child),subtree);
  144.     g_signal_connect(G_OBJECT(subtree),"unselect_child",G_CALLBACK(cb_unselect_child),subtree);
  145.     g_signal_connect(G_OBJECT(subtree),"selection_changed",G_CALLBACK(cb_selection_changed),subtree);
  146.     gtk_tree_set_selection_mode(GTK_TREE(subtree),GTK_TREE_VIEW_ITEM);
  147.     gtk_tree_item_set_subtree(GTK_TREE_ITEM(item),subtree);

  148.     //树叶
  149.     for( i = 0 ; i < 2 ; i++ )
  150.     {
  151.         subitem     =   gtk_tree_item_new_with_label(software[i]);
  152.         g_signal_connect(G_OBJECT(subitem),"select",G_CALLBACK(cb_itemsignal),"select");
  153.         g_signal_connect(G_OBJECT(subitem),"deselect",G_CALLBACK(cb_itemsignal),"deselect");
  154.         g_signal_connect(G_OBJECT(subitem),"toggle",G_CALLBACK(cb_itemsignal),"toggle");
  155.         g_signal_connect(G_OBJECT(subitem),"expand",G_CALLBACK(cb_itemsignal),"expand");
  156.         g_signal_connect(G_OBJECT(subitem),"collapse",G_CALLBACK(cb_itemsignal),"collapse");
  157.         gtk_tree_append(GTK_TREE(subtree),subitem);
  158.         gtk_widget_show(subitem);

  159.     }

  160.     gtk_widget_show(window);

  161.     gtk_main();

  162.     return 0;
  163.    
  164. }
复制代码


我感到奇怪的是明明gtk/gtk.h中包含的gtk/gtktree.h文件里面有这个变量,为什么在编译的时候,还会找不到呢?(我用的automake 来生成的makefile文件)
再上一张文件示截图
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP