{"id":77,"date":"2014-01-29T17:09:55","date_gmt":"2014-01-29T17:09:55","guid":{"rendered":""},"modified":"2014-01-29T17:09:55","modified_gmt":"2014-01-29T17:09:55","slug":"","status":"publish","type":"post","link":"http:\/\/weizn.net\/?p=77","title":{"rendered":"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView)"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_17 counter-hierarchy\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" style=\"display: none;\"><i class=\"ez-toc-glyphicon ez-toc-icon-toggle\"><\/i><\/a><\/span><\/div>\n<nav><ul class=\"ez-toc-list ez-toc-list-level-1\"><li class=\"ez-toc-page-1 ez-toc-heading-level-1\"><a class=\"ez-toc-link ez-toc-heading-1\" href=\"http:\/\/weizn.net\/?p=77\/#GTK%E4%B8%AD%E7%9A%84%E6%A0%91%E7%8A%B6%E5%88%97%E8%A1%A8%E6%9E%84%E4%BB%B6GtkTreeView\" title=\"\n\tGTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView) \n\">\n\tGTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView) \n<\/a><ul class=\"ez-toc-list-level-2\"><li class=\"ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-2\" href=\"http:\/\/weizn.net\/?p=77\/#%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%88%97%E8%A1%A8%E6%9E%84%E4%BB%B6%E7%A4%BA%E4%BE%8BSimple_List_View\" title=\"\n\t\u4e00\u4e2a\u7b80\u5355\u7684\u5217\u8868\u6784\u4ef6\u793a\u4f8b(Simple List View) \n\">\n\t\u4e00\u4e2a\u7b80\u5355\u7684\u5217\u8868\u6784\u4ef6\u793a\u4f8b(Simple List View) \n<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-3\" href=\"http:\/\/weizn.net\/?p=77\/#%E9%AB%98%E7%BA%A7%E5%88%97%E8%A1%A8%EF%BC%88Advanced_List_View%EF%BC%89\" title=\"\n\t\u9ad8\u7ea7\u5217\u8868\uff08Advanced List View\uff09 \n\">\n\t\u9ad8\u7ea7\u5217\u8868\uff08Advanced List View\uff09 \n<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-4\" href=\"http:\/\/weizn.net\/?p=77\/#%E6%A0%91%E7%8A%B6%E8%A7%86%E5%9B%BE%EF%BC%88Tree_View%EF%BC%89\" title=\"\n\t\u6811\u72b6\u89c6\u56fe\uff08Tree View\uff09 \n\">\n\t\u6811\u72b6\u89c6\u56fe\uff08Tree View\uff09 \n<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"GTK%E4%B8%AD%E7%9A%84%E6%A0%91%E7%8A%B6%E5%88%97%E8%A1%A8%E6%9E%84%E4%BB%B6GtkTreeView\"><\/span>\n\tGTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>\n\t\u5728\u672c\u7ae0\u7684GTK+\u7a0b\u5e8f\u8bbe\u8ba1\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u5411\u5927\u5bb6\u91cd\u70b9\u4ecb\u7ecd\u975e\u5e38\u5e38\u7528\u4e5f\u6709\u70b9\u590d\u6742\u7684\u6784\u4ef6\u2014\u2014GtkTreeView \u3002\n<\/p>\n<p>\n\t<b class=\"keyword\">GtkTreeView<\/b> \u6784\u4ef6\u662f\u4e00\u4e2a\u9ad8\u7ea7\u7684\u6784\u4ef6\uff0c\u5229\u7528\u4ed6\u4f60\u5c31\u53ef\u4ee5\u5236\u4f5c\u51fa\u6f02\u4eae\u7684\u666e\u901a\u5217\u8868\u6216\u8005\u662f\u6811\u72b6\u7684\u5217\u8868\u3002\u8fd9\u4e2a\u6784\u4ef6\u91cc\u53ef\u4ee5\u5305\u542b\u4e00\u6216\u8005\u591a\u884c\u3002\u4ed6\u7684\u6784\u67b6\u5462\uff1f\u6b63\u662f\u91c7\u7528\u4e86\u5927\u540d\u9f0e\u9f0e\u7684MVC (Model View Controller) \u8bbe\u8ba1\u6846\u67b6\u3002\u4e5f\u5c31\u662f\u8bf4\u6570\u636e\u548c\u663e\u793a\u65b9\u5f0f\u662f\u8fdb\u884c\u4e86\u4e00\u79cd\u5206\u79bb\u7684\u64cd\u4f5c\u3002\n<\/p>\n<p>\n\t\u4e4b\u524d\u6211\u4eec\u6709\u8bf4\u8fc7\u590d\u6742\u8fd9\u4e2a\u95ee\u9898\uff0c\u4e8e\u662f\u5728GtktreeView\u6784\u4ef6\u4e2d\u786e\u5b9e\u8fd8\u6709\u7740\u5176\u4ed6\u51e0\u4e2a\u72ec\u7acb\u7684\u5bf9\u8c61\u7ed3\u6784\uff08objects\uff09\u3002\u5176\u4e2d <b class=\"keyword\">GtkCellRenderer<\/b> \u5c31\u51b3\u5b9a\u4e86\u5728<b class=\"keyword\">GtkTreeViewColumn<\/b>.<br \/>\n\u4e2d\u7684\u6570\u636e\u7a76\u7adf\u662f\u5982\u4f55\u6765\u8fdb\u884c\u663e\u793a\u5448\u73b0\u7684\u3002<b class=\"keyword\">GtkListStore<\/b> \u548c <b class=\"keyword\">GtkTreeStore<\/b> \u7684\u529f\u80fd\u4e3a\u4f53\u73b0\u6a21\u578b\uff08model\uff09\u7684\u4f5c\u7528\u3002\u4e5f\u5c31\u662f\u8bf4\u4ed6\u4eec\u662f\u7528\u6765\u5904\u7406\u548c\u5206\u6790\u5c06\u8981\u5728GtkTreeView\u663e\u793a\u7684\u6570\u636e\u7684\u3002 <b class=\"keyword\">GtkTreeIter<\/b> \u5219\u662f\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u88ab\u7528\u4e8e\u5728GtkTreeView\u6784\u4ef6\u4e2d\uff0c\u5bf9\u884c\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u64cd\u4f5c\u3002 <b class=\"keyword\">GtkTreeSelection<\/b> \u5219\u662f\u7528\u6765\u5904\u7406\u9009\u9879\u7684\u3002\n<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%88%97%E8%A1%A8%E6%9E%84%E4%BB%B6%E7%A4%BA%E4%BE%8BSimple_List_View\"><\/span>\n\t\u4e00\u4e2a\u7b80\u5355\u7684\u5217\u8868\u6784\u4ef6\u793a\u4f8b(Simple List View)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n\t\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\u5c06\u5411\u5927\u5bb6\u5c55\u793a\u4e00\u4e2a\u7b80\u5355\u7684\u5217\u8868\u6548\u679c\u3002\u663e\u793a\u7684\u6570\u636e\u4ec5\u4ec5\u662f\u6587\u672c\u3002\n<\/p>\n<pre class=\"code\">\r\n\r\n\r\n<pre class=\"brush:cpp; toolbar: true; auto-links: true;\">#include &lt;gtk\/gtk.h&gt;\r\n\r\nenum\r\n{\r\n  LIST_ITEM = 0,\r\n  N_COLUMNS\r\n};\r\n\r\nstatic void\r\ninit_list(GtkWidget *list)\r\n{\r\n\r\n  GtkCellRenderer *renderer;\r\n  GtkTreeViewColumn *column;\r\n  GtkListStore *store;\r\n\r\n  renderer = gtk_cell_renderer_text_new();\r\n  column = gtk_tree_view_column_new_with_attributes(\"List Items\",\r\n          renderer, \"text\", LIST_ITEM, NULL);\r\n  gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);\r\n\r\n  store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING);\r\n\r\n  gtk_tree_view_set_model(GTK_TREE_VIEW(list), \r\n      GTK_TREE_MODEL(store));\r\n\r\n  g_object_unref(store);\r\n}\r\n\r\nstatic void\r\nadd_to_list(GtkWidget *list, const gchar *str)\r\n{\r\n  GtkListStore *store;\r\n  GtkTreeIter iter;\r\n\r\n  store = GTK_LIST_STORE(gtk_tree_view_get_model\r\n      (GTK_TREE_VIEW(list)));\r\n\r\n  gtk_list_store_append(store, &amp;iter);\r\n  gtk_list_store_set(store, &amp;iter, LIST_ITEM, str, -1);\r\n}\r\n\r\n\r\nvoid  on_changed(GtkWidget *widget, gpointer label) \r\n{\r\n  GtkTreeIter iter;\r\n  GtkTreeModel *model;\r\n  char *value;\r\n\r\n\r\n  if (gtk_tree_selection_get_selected(\r\n      GTK_TREE_SELECTION(widget), &amp;model, &amp;iter)) {\r\n\r\n    gtk_tree_model_get(model, &amp;iter, LIST_ITEM, &amp;value,  -1);\r\n    gtk_label_set_text(GTK_LABEL(label), value);\r\n    g_free(value);\r\n  }\r\n\r\n}\r\n\r\nint main (int argc, char *argv[])\r\n{\r\n\r\n  GtkWidget *window;\r\n  GtkWidget *list;\r\n\r\n  GtkWidget *vbox;\r\n  GtkWidget *label;\r\n  GtkTreeSelection *selection; \r\n\r\n  gtk_init(&amp;argc, &amp;argv);\r\n\r\n\r\n  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);\r\n  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);\r\n  gtk_container_set_border_width(GTK_CONTAINER(window), 10);\r\n  gtk_widget_set_size_request(window, 270, 250);\r\n  gtk_window_set_title(GTK_WINDOW(window), \"List View\");\r\n\r\n  list = gtk_tree_view_new();\r\n  gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);\r\n\r\n  vbox = gtk_vbox_new(FALSE, 0);\r\n\r\n  gtk_box_pack_start(GTK_BOX(vbox), list, TRUE, TRUE, 5);\r\n\r\n  label = gtk_label_new(\"\");\r\n  gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);\r\n  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);\r\n\r\n  gtk_container_add(GTK_CONTAINER(window), vbox);\r\n\r\n  init_list(list);\r\n  add_to_list(list, \"Aliens\");\r\n  add_to_list(list, \"Leon\");\r\n  add_to_list(list, \"Capote\");\r\n  add_to_list(list, \"Saving private Ryan\");\r\n  add_to_list(list, \"Der Untergang\");\r\n\r\n\r\n  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));\r\n\r\n  g_signal_connect(selection, \"changed\", \r\n      G_CALLBACK(on_changed), label);\r\n\r\n  g_signal_connect(G_OBJECT (window), \"destroy\",\r\n      G_CALLBACK(gtk_main_quit), NULL);\r\n\r\n  gtk_widget_show_all(window);\r\n\r\n  gtk_main ();\r\n\r\n  return 0;\r\n}<\/pre>\n<p>\n\t\u5728\u6211\u4eec\u4e0a\u9762\u7684\u8fd9\u4e2a\u793a\u4f8b\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u5c06\u5411\u5927\u5bb6\u5c55\u793a\u7684\u662f5\u4e2a\u6761\u76ee\u5e76\u5e03\u7f6e\u4e8e<b class=\"keyword\">GtkTreeView<\/b> \u6784\u4ef6\u4e2d\u3002\u6211\u4eec\u9996\u5148\u5728window\u4e2d\u653e\u7f6e\u4e00\u4e2a<b class=\"keyword\">GtkVBox<\/b> \u6784\u4ef6\u3002 \u5728\u8fd9\u4e2a GtkVBox \u6784\u4ef6\u4e2d\u542b\u6709\u4e24\u4e2a\u6784\u4ef6\uff1a<b class=\"keyword\">GtkTreeView<\/b>\u548c<b class=\"keyword\">GtkLabel<\/b>\u3002\n<\/p>\n<pre class=\"explanation\">  list = gtk_tree_view_new();\r\n  gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);\r\n<\/pre>\n<p>\n\t\u4e0a\u9762\u7684\u4ee3\u7801\u751f\u6210\u4e86\u4e00\u4e2a <b class=\"keyword\">GtkTreeView<\/b> \u6784\u4ef6\u5e76\u4e14\u680f\u6570\u88ab\u8bbe\u7f6e\u4e3aFALSE\u5373\u53ea\u6709\u4e00\u680f\u3002\n<\/p>\n<pre class=\"explanation\">  label = gtk_label_new(\"\");\r\n  gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);\r\n  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);\r\n<\/pre>\n<p>\n\t\u751f\u6210\u4e86\u4e00\u4e2a <b class=\"keyword\">GtkLabel<\/b>\u6784\u4ef6\uff0c\u5e76\u4e14\u628a\u5b83\u653e\u7f6e\u5728<b class=\"keyword\">GtkTreeView<\/b>\u6784\u4ef6\u7684\u4e0b\u65b9\uff0c\u8bbe\u7f6e\u4e3a\u5c45\u4e2d\u3002\n<\/p>\n<pre class=\"explanation\"> init_list(list);\r\n<\/pre>\n<p>\n\t\u8c03\u7528list()\u51fd\u6570\uff0c\u521d\u59cb\u5316\u6784\u4ef6list\u3002\n<\/p>\n<pre class=\"explanation\"> renderer = gtk_cell_renderer_text_new();\r\n column = gtk_tree_view_column_new_with_attributes(\"List Items\",\r\n         renderer, \"text\", LIST_ITEM, NULL);\r\n gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);\r\n<\/pre>\n<p>\n\t\u5728\u521d\u59cb\u5316\u51fd\u6570\u4e2d\uff0c\u6211\u4eec\u751f\u6210\u4e86\u53ea\u6709\u4e00\u680f\u7684GtkTreeView\u3002\n<\/p>\n<pre class=\"explanation\"> store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING);\r\n\r\n gtk_tree_view_set_model(GTK_TREE_VIEW(list), \r\n     GTK_TREE_MODEL(store));\r\n<\/pre>\n<p>\n\t\u63a5\u4e0b\u6765\u6211\u4eec\u53c8\u751f\u6210\u4e86\u4e00\u4e2a<b class=\"keyword\">GtkListStore<\/b> \u6784\u4ef6(a model) \u7136\u540e\u628a\u5b83\u4e0elist \u6784\u4ef6\u7ed1\u5b9a\u3002\n<\/p>\n<pre class=\"explanation\"> g_object_unref(store);\r\n<\/pre>\n<p>\n\t\u8fd9\u4e2a model \u88ab\u81ea\u52a8\u7684\u9500\u6bc1\uff0c\u4ee5\u91ca\u653e\u5185\u5b58\u7a7a\u95f4\u3002\n<\/p>\n<pre class=\"explanation\"> add_to_list(list, \"Aliens\");\r\n<\/pre>\n<p>\n\t\u4e0a\u9762\u5c31\u662f\u5728\u8c03\u7528add_to_list\uff08\uff09\u51fd\u6570\uff0c\u5b9e\u73b0\u5411list \u4e2d\u5728\u589e\u52a0\u4e00\u4e2a\u9009\u9879\u7684\u529f\u80fd\u3002\n<\/p>\n<pre class=\"explanation\"> store = GTK_LIST_STORE(gtk_tree_view_get_model\r\n     (GTK_TREE_VIEW(list)));\r\n\r\n gtk_list_store_append(store, &amp;iter);\r\n gtk_list_store_set(store, &amp;iter, LIST_ITEM, str, -1);\r\n<\/pre>\n<p>\n\t\u5728\u51fd\u6570<b class=\"keyword\">add_to_list()<\/b> \u4e2d\uff0c\u6211\u4eec\u5229\u7528\u7cfb\u7edf\u51fd\u6570<b class=\"keyword\">gtk_tree_view_get_model()<\/b>\u6765\u83b7\u5f97model\u3002\u6211\u4eec\u751f\u6210\u65b0\u7684\u4e00\u884c\u5e76\u628a\u884c\u4e2d\u7684\u6570\u636e\u4ea4\u7ed9model\u5904\u7406\uff0c\u8fd9\u91cc\u6b63\u662f\u501f\u52a9 <b class=\"keyword\">GtkTreeIter<\/b>\u6765\u5b8c\u6210\u8fd9\u4e2a\u529f\u80fd\u3002\n<\/p>\n<pre class=\"explanation\"> selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));\r\n<\/pre>\n<p>\n\t<b class=\"keyword\">GtkTreeSelection<\/b>\u9645\u4e0a\u5e76\u4e0d\u9700\u8981\u660e\u786e\u751f\u6210\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u662f\u5229\u7528 <b class=\"keyword\">GtkTreeView<\/b>\u6784\u4ef6\u81ea\u52a8\u6765\u751f\u6210\u3002\u6765\u5e2e\u52a9\u5b8c\u6210\u8fd9\u9879\u5de5\u4f5c\u7684\u6b63\u5982\u4f60\u6240\u89c1\u5230\u7684\u662f\u7cfb\u7edf\u51fd\u6570<b class=\"keyword\">gtk_tree_view_get_selection()<\/b>\u3002\n<\/p>\n<pre class=\"explanation\"> g_signal_connect(selection, \"changed\", \r\n     G_CALLBACK(on_changed), label);\r\n<\/pre>\n<p>\n\t\u8fd9\u4e2a\u5c31\u5f88\u597d\u7406\u89e3\u4e86\uff0c\u628achanged \u4fe1\u53f7\u4e0e <b class=\"keyword\">GtkTreeSelection<\/b>\u7ed1\u5b9a\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4e0e\u56de\u8c03\u51fd\u6570 <b class=\"keyword\">on_changed()<\/b>\u5efa\u7acb\u4e86\u8054\u7cfb\u3002\n<\/p>\n<pre class=\"explanation\"> gtk_tree_model_get(model, &amp;iter, LIST_ITEM, &amp;value,  -1);\r\n gtk_label_set_text(GTK_LABEL(label), value);\r\n<\/pre>\n<p>\n\t\u5728\u8fd9\u4e2a\u56de\u8c03\u51fd\u6570\u91cc\uff0c\u6211\u4eec\u53d6\u5f97\u4e86\u5bf9\u5e94\u884c\u7684\u6570\u636e\uff0c\u5f53\u7136\u662f\u901a\u8fc7iter \u6765\u83b7\u53d6\u7684\u3002\n<\/p>\n<p>\n<img decoding=\"async\" src=\"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png\" alt=\"List View\" \/> <\/p>\n<div class=\"figure\">\n\tFigure: List View\n<\/div>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%E9%AB%98%E7%BA%A7%E5%88%97%E8%A1%A8%EF%BC%88Advanced_List_View%EF%BC%89\"><\/span>\n\t\u9ad8\u7ea7\u5217\u8868\uff08Advanced List View\uff09<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n\t\u5728\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4eec\u5c06\u5728\u524d\u8005\u7684\u57fa\u7840\u4e0a\u586b\u52a0\u4e00\u4e9b\u989d\u5916\u7684\u529f\u80fd\u3002\u6211\u4eec\u5c06\u5b9e\u73b0\u80fd\u591f\u5217\u8868\u4e2d\u586b\u52a0\u6216\u8005\u53bb\u5904\u5176\u4e2d\u7684\u6570\u636e\u9879\u3002\n<\/p>\n<pre class=\"code\">\r\n\r\n\r\n<pre class=\"brush:cpp; toolbar: true; auto-links: true;\">#include &lt;gtk\/gtk.h&gt;\r\n\r\nenum\r\n{\r\n  LIST_ITEM = 0,\r\n  N_COLUMNS\r\n};\r\n\r\nGtkWidget *list;\r\n\r\n\r\nstatic void\r\nappend_item(GtkWidget *widget, gpointer entry)\r\n{\r\n  GtkListStore *store;\r\n  GtkTreeIter  iter;\r\n\r\n  const char *str = gtk_entry_get_text(entry); \r\n\r\n  store = GTK_LIST_STORE(gtk_tree_view_get_model(\r\n       GTK_TREE_VIEW(list)));\r\n\r\n  gtk_list_store_append(store, &amp;iter);\r\n  gtk_list_store_set(store, &amp;iter, LIST_ITEM, str, -1);\r\n}\r\n\r\nstatic void\r\nremove_item(GtkWidget *widget, gpointer selection)\r\n{\r\n  GtkListStore *store;\r\n  GtkTreeModel *model;\r\n  GtkTreeIter  iter;\r\n\r\n\r\n  store = GTK_LIST_STORE(gtk_tree_view_get_model(\r\n      GTK_TREE_VIEW (list)));\r\n  model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));\r\n\r\n  if (gtk_tree_model_get_iter_first(model, &amp;iter) == FALSE) \r\n      return;\r\n\r\n  if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), \r\n      &amp;model, &amp;iter)) {\r\n    gtk_list_store_remove(store, &amp;iter);\r\n  }\r\n}\r\n\r\nstatic void\r\nremove_all(GtkWidget *widget, gpointer selection)\r\n{\r\n  GtkListStore *store;\r\n  GtkTreeModel *model;\r\n  GtkTreeIter  iter;\r\n\r\n\r\n  store = GTK_LIST_STORE(gtk_tree_view_get_model(\r\n      GTK_TREE_VIEW (list)));\r\n  model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));\r\n\r\n  if (gtk_tree_model_get_iter_first(model, &amp;iter) == FALSE) \r\n      return;\r\n  gtk_list_store_clear(store);\r\n}\r\n\r\nstatic void\r\ninit_list(GtkWidget *list)\r\n{\r\n\r\n  GtkCellRenderer    *renderer;\r\n  GtkTreeViewColumn  *column;\r\n  GtkListStore       *store;\r\n\r\n  renderer = gtk_cell_renderer_text_new();\r\n  column = gtk_tree_view_column_new_with_attributes(\"List Item\",\r\n          renderer, \"text\", LIST_ITEM, NULL);\r\n  gtk_tree_view_append_column(GTK_TREE_VIEW (list), column);\r\n\r\n  store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING);\r\n\r\n  gtk_tree_view_set_model(GTK_TREE_VIEW (list), \r\n      GTK_TREE_MODEL(store));\r\n\r\n  g_object_unref(store);\r\n}\r\n\r\n\r\nint main (int argc, char *argv[])\r\n{\r\n\r\n  GtkWidget *window;\r\n  GtkWidget *sw;\r\n\r\n  GtkWidget *remove;\r\n  GtkWidget *add;\r\n  GtkWidget *removeAll;\r\n  GtkWidget *entry;\r\n\r\n  GtkWidget *vbox;\r\n  GtkWidget *hbox;\r\n\r\n  GtkTreeSelection *selection; \r\n\r\n  gtk_init(&amp;argc, &amp;argv);\r\n\r\n\r\n  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);\r\n  sw = gtk_scrolled_window_new(NULL, NULL);\r\n  list = gtk_tree_view_new();\r\n\r\n  gtk_window_set_title (GTK_WINDOW (window), \"List View\");\r\n  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);\r\n  gtk_container_set_border_width (GTK_CONTAINER (window), 10);\r\n  gtk_widget_set_size_request (window, 370, 270);\r\n\r\n  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw),\r\n            GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);\r\n\r\n  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw),\r\n            GTK_SHADOW_ETCHED_IN);\r\n\r\n  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);\r\n\r\n  vbox = gtk_vbox_new(FALSE, 0);\r\n\r\n  gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5);\r\n\r\n  hbox = gtk_hbox_new(TRUE, 5);\r\n\r\n  add = gtk_button_new_with_label(\"Add\");\r\n  remove = gtk_button_new_with_label(\"Remove\");\r\n  removeAll = gtk_button_new_with_label(\"Remove All\");\r\n  entry = gtk_entry_new();\r\n\r\n  gtk_box_pack_start(GTK_BOX(hbox), add, FALSE, TRUE, 3);\r\n  gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, TRUE, 3);\r\n  gtk_box_pack_start(GTK_BOX(hbox), remove, FALSE, TRUE, 3);\r\n  gtk_box_pack_start(GTK_BOX(hbox), removeAll, FALSE, TRUE, 3);\r\n\r\n  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 3);\r\n\r\n  gtk_container_add(GTK_CONTAINER (sw), list);\r\n  gtk_container_add(GTK_CONTAINER (window), vbox);\r\n\r\n  init_list(list);\r\n\r\n  selection  = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));\r\n\r\n  g_signal_connect(G_OBJECT(add), \"clicked\",\r\n          G_CALLBACK(append_item), entry);\r\n\r\n  g_signal_connect(G_OBJECT(remove), \"clicked\",\r\n          G_CALLBACK(remove_item), selection);\r\n\r\n  g_signal_connect(G_OBJECT(removeAll), \"clicked\",\r\n          G_CALLBACK(remove_all), selection);\r\n\r\n  g_signal_connect (G_OBJECT (window), \"destroy\",\r\n          G_CALLBACK(gtk_main_quit), NULL);\r\n\r\n  gtk_widget_show_all(window);\r\n\r\n  gtk_main ();\r\n\r\n  return 0;\r\n}<\/pre>\n<p>\n\t\u4e0e\u524d\u9762\u7684\u4f8b\u5b50\u4e2d\u7684label\u4e0d\u540c\u7684\u662f\uff0c\u6211\u4eec\u751f\u6210\u4e86\u4e09\u4e2a\u6309\u94ae\u548c\u4e00\u4e2a\u5355\u884c\u6587\u672c\u8f93\u5165\u6846\u3002\u6211\u4eec\u5c06\u5b9e\u73b0\u80fd\u591f\u52a8\u6001\u7684\u4e3a\u5217\u8868\u589e\u52a0\u4e00\u4e2a\u65b0\u7684\u6570\u636e\u9879\u6216\u8005\u53bb\u5904\u9009\u4e2d\u7684\u6570\u636e\u9879\u4ee5\u53ca\u5168\u90e8\u6570\u636e\u9879\u3002\n<\/p>\n<pre class=\"explanation\"> sw = gtk_scrolled_window_new(NULL, NULL);\r\n ...\r\n\r\n gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw),\r\n           GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);\r\n\r\n gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw),\r\n           GTK_SHADOW_ETCHED_IN);\r\n\r\n ...\r\n gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5);\r\n ...\r\n gtk_container_add(GTK_CONTAINER (sw), list);\r\n<\/pre>\n<p>\n\t<b class=\"keyword\">GtkTreeView<\/b>\u6784\u4ef6\u88ab\u653e\u7f6e\u5728\u5e26\u6709\u6ed1\u5757\u7684\u7a97\u53e3\u4e2d\u3002\n<\/p>\n<pre class=\"explanation\"> if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), \r\n     &amp;model, &amp;iter)) {\r\n   gtk_list_store_remove(store, &amp;iter);\r\n }\r\n<\/pre>\n<p>\n\t\u7cfb\u7edf\u51fd\u6570 <b class=\"keyword\">gtk_list_store_remove()<\/b>\u7684\u529f\u80fd\u662f\u53bb\u5904\u5217\u8868\u4e2d\u7684\u6240\u9009\u7684\u6570\u636e\u9879\u3002\n<\/p>\n<pre class=\"explanation\"> gtk_list_store_clear(store);\r\n<\/pre>\n<p>\n\t\u7cfb\u7edf\u51fd\u6570<b class=\"keyword\">gtk_list_store_clear()<\/b>\u5c06\u7528\u4e8e\u6e05\u9664\u5217\u8868\u4e2d\u7684\u6240\u6709\u6570\u636e\u9879\u3002\n<\/p>\n<pre class=\"explanation\"> if (gtk_tree_model_get_iter_first(model, &amp;iter) == FALSE) \r\n     return;\r\n<\/pre>\n<p>\n\t\u4e0a\u9762\u7684\u4ee3\u7801\u662f\u7528\u4e8e\u68c0\u67e5\u662f\u5426\u5728\u5217\u8868\u4e2d\u8fd8\u5b58\u6709\u5269\u4e0b\u7684\u6570\u636e\u9879\u3002\u5f88\u663e\u7136\uff0c\u6211\u4eec\u80fd\u591f\u628a\u5217\u8868\u6e05\u9664\u7684\u4e00\u5e72\u4e8c\u51c0\u3002\n<\/p>\n<p>\n<img decoding=\"async\" src=\"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/eaa3a65522406bb39f05011d85d6690d20140129171158.png\" alt=\"Advanced List View\" \/> <\/p>\n<div class=\"figure\">\n\tFigure: Advanced List View\n<\/div>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%E6%A0%91%E7%8A%B6%E8%A7%86%E5%9B%BE%EF%BC%88Tree_View%EF%BC%89\"><\/span>\n\t\u6811\u72b6\u89c6\u56fe\uff08Tree View\uff09<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n\t\u63a5\u7740\uff0c\u6211\u4eec\u5c06\u5411\u5927\u5bb6\u5c55\u793a\u5982\u4f55\u8fd0\u7528\u6784\u4ef6<b class=\"keyword\">GtkTreeView<\/b>\u6765\u53bb\u663e\u793a\u6709\u7b49\u7ea7\u5dee\u5f02\u7684\u6570\u636e\u9879\u3002\u5728\u5148\u524d\u7684\u4e24\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4eec\u6211\u4eec\u7528\u5230\u4e86\u5217\u8868\u8bd5\u56fe\uff0c\u73b0\u5728\u6211\u4eec\u4ecb\u7ecd\u6811\u72b6\u89c6\u56fe\u3002\n<\/p>\n<pre class=\"code\">\r\n\r\n\r\n<pre class=\"brush:cpp; toolbar: true; auto-links: true;\">#include &lt;gtk\/gtk.h&gt;\r\n\r\nenum\r\n{\r\n  COLUMN = 0,\r\n  NUM_COLS\r\n} ;\r\n\r\nvoid  on_changed(GtkWidget *widget, gpointer statusbar) \r\n{\r\n  GtkTreeIter iter;\r\n  GtkTreeModel *model;\r\n  char *value;\r\n\r\n\r\n  if (gtk_tree_selection_get_selected(\r\n      GTK_TREE_SELECTION(widget), &amp;model, &amp;iter)) {\r\n\r\n    gtk_tree_model_get(model, &amp;iter, COLUMN, &amp;value,  -1);\r\n    gtk_statusbar_push(GTK_STATUSBAR(statusbar),\r\n        gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), \r\n            value), value);\r\n    g_free(value);\r\n  }\r\n}\r\n\r\n\r\nstatic GtkTreeModel *\r\ncreate_and_fill_model (void)\r\n{\r\n  GtkTreeStore *treestore;\r\n  GtkTreeIter toplevel, child;\r\n\r\n  treestore = gtk_tree_store_new(NUM_COLS,\r\n                  G_TYPE_STRING);\r\n\r\n  gtk_tree_store_append(treestore, &amp;toplevel, NULL);\r\n  gtk_tree_store_set(treestore, &amp;toplevel,\r\n                     COLUMN, \"Scripting languages\",\r\n                     -1);\r\n\r\n  gtk_tree_store_append(treestore, &amp;child, &amp;toplevel);\r\n  gtk_tree_store_set(treestore, &amp;child,\r\n                     COLUMN, \"Python\",\r\n                     -1);\r\n  gtk_tree_store_append(treestore, &amp;child, &amp;toplevel);\r\n  gtk_tree_store_set(treestore, &amp;child,\r\n                     COLUMN, \"Perl\",\r\n                     -1);\r\n  gtk_tree_store_append(treestore, &amp;child, &amp;toplevel);\r\n  gtk_tree_store_set(treestore, &amp;child,\r\n                     COLUMN, \"PHP\",\r\n                     -1);\r\n\r\n  gtk_tree_store_append(treestore, &amp;toplevel, NULL);\r\n  gtk_tree_store_set(treestore, &amp;toplevel,\r\n                     COLUMN, \"Compiled languages\",\r\n                     -1);\r\n\r\n  gtk_tree_store_append(treestore, &amp;child, &amp;toplevel);\r\n  gtk_tree_store_set(treestore, &amp;child,\r\n                     COLUMN, \"C\",\r\n                     -1);\r\n\r\n  gtk_tree_store_append(treestore, &amp;child, &amp;toplevel);\r\n  gtk_tree_store_set(treestore, &amp;child,\r\n                     COLUMN, \"C++\",\r\n                     -1);\r\n\r\n  gtk_tree_store_append(treestore, &amp;child, &amp;toplevel);\r\n  gtk_tree_store_set(treestore, &amp;child,\r\n                     COLUMN, \"Java\",\r\n                     -1);\r\n\r\n  return GTK_TREE_MODEL(treestore);\r\n}\r\n\r\n\r\n\r\nstatic GtkWidget *\r\ncreate_view_and_model (void)\r\n{\r\n  GtkTreeViewColumn *col;\r\n  GtkCellRenderer *renderer;\r\n  GtkWidget *view;\r\n  GtkTreeModel *model;\r\n\r\n  view = gtk_tree_view_new();\r\n\r\n  col = gtk_tree_view_column_new();\r\n  gtk_tree_view_column_set_title(col, \"Programming languages\");\r\n  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);\r\n\r\n  renderer = gtk_cell_renderer_text_new();\r\n  gtk_tree_view_column_pack_start(col, renderer, TRUE);\r\n  gtk_tree_view_column_add_attribute(col, renderer, \r\n      \"text\", COLUMN);\r\n\r\n  model = create_and_fill_model();\r\n  gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);\r\n  g_object_unref(model); \r\n\r\n  return view;\r\n}\r\n\r\n\r\nint\r\nmain (int argc, char **argv)\r\n{\r\n  GtkWidget *window;\r\n  GtkWidget *view;\r\n  GtkTreeSelection *selection; \r\n  GtkWidget *vbox;\r\n  GtkWidget *statusbar;\r\n\r\n  gtk_init(&amp;argc, &amp;argv);\r\n\r\n  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);\r\n  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);\r\n  gtk_window_set_title(GTK_WINDOW(window), \"Tree View\");\r\n  gtk_widget_set_size_request (window, 350, 300);\r\n\r\n\r\n  vbox = gtk_vbox_new(FALSE, 2);\r\n  gtk_container_add(GTK_CONTAINER(window), vbox);\r\n\r\n\r\n  view = create_view_and_model();\r\n  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));\r\n\r\n  gtk_box_pack_start(GTK_BOX(vbox), view, TRUE, TRUE, 1);\r\n\r\n  statusbar = gtk_statusbar_new();\r\n  gtk_box_pack_start(GTK_BOX(vbox), statusbar, FALSE, TRUE, 1);\r\n\r\n  g_signal_connect(selection, \"changed\", \r\n      G_CALLBACK(on_changed), statusbar);\r\n\r\n  g_signal_connect (G_OBJECT (window), \"destroy\",\r\n          G_CALLBACK(gtk_main_quit), NULL);\r\n\r\n  gtk_widget_show_all(window);\r\n\r\n  gtk_main();\r\n\r\n  return 0;\r\n}<\/pre>\n<p>\n\t\u5728\u6211\u4eec\u4e0a\u9762\u7684\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u6765\u5b8c\u6210\u4e00\u9879\u4efb\u52a1\uff1a\u628a\u811a\u672c\u8bed\u8a00\u548c\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u5bf9\u5e94\u7684\u6570\u636e\u9879\uff0c\u8fdb\u884c\u533a\u5206\u3002\u201c\u8bed\u8a00\u79cd\u7c7b\u201d\u4f5c\u4e3a\u5176\u5bf9\u5e94\u6570\u636e\u9879\u4e2d\u7684\u9876\u5c42\u8282\u70b9\uff0c\u4e5f\u5c31\u662f\u8bf4\u662f\u4e00\u884c\u6570\u636e\u5217\u8868\u7684\u201c\u5934\u5934\u201d\u3002\u5f53\u524d\u9009\u79cd\u7684\u6570\u636e\u9879\uff0c\u5c06\u5728\u72b6\u6001\u680f\u4e2d\u663e\u793a\u51fa\u6765\u3002\n<\/p>\n<p>\n\t\u4ece\u4e0a\u9762\u7684\u8fd9\u4e9b\u6b65\u9aa4\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u6e05\u6670\u7684\u770b\u5230\uff0c\u6811\u72b6\u89c6\u56fe\u4e0e\u5217\u8868\u89c6\u56fe\u7684\u751f\u6210\u65b9\u6cd5\u5f88\u76f8\u4f3c\u3002\n<\/p>\n<pre class=\"explanation\"> GtkTreeStore *treestore;\r\n<\/pre>\n<p>\n\t\u8fd9\u91cc\u6211\u4eec\u5f53\u7136\u8981\u4f7f\u7528\u4e00\u4e2a\u4e0d\u540c\u7684model\u2014\u2014 <b class=\"keyword\">GtkTreeStore<\/b>\u3002\n<\/p>\n<pre class=\"explanation\"> treestore = gtk_tree_store_new(NUM_COLS,\r\n                 G_TYPE_STRING);\r\n<\/pre>\n<p>\n\t\u6211\u4eec\u751f\u6210\u7684 <b class=\"keyword\">GtkTreeStore<\/b>\u53ea\u6709\u4e00\u5217\u3002\n<\/p>\n<pre class=\"explanation\"> gtk_tree_store_append(treestore, &amp;toplevel, NULL);\r\n gtk_tree_store_set(treestore, &amp;toplevel,\r\n                    COLUMN, \"Scripting languages\",\r\n                    -1);\r\n<\/pre>\n<p>\n\t\u8fd9\u5176\u4e2d\u7684\u4ee3\u7801\u5c31\u662f\u5728\u5b8c\u6210\u4e00\u4e2a\u9876\u5c42\u8282\u70b9\u7684\u64cd\u4f5c\u3002\n<\/p>\n<pre class=\"explanation\"> gtk_tree_store_append(treestore, &amp;child, &amp;toplevel);\r\n gtk_tree_store_set(treestore, &amp;child,\r\n                    COLUMN, \"Python\",\r\n                    -1);\r\n<\/pre>\n<p>\n\t\u4e0a\u9762\u7684\u4ee3\u7801\u5728\u751f\u6210\u4e00\u4e2a\u5b50\u6570\u636e\u9879\u3002\n<\/p>\n<p>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/7cfcf86b8a4697c28a2d225063f588fe20140129171159.png\" alt=\"\" height=\"329\" width=\"360\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<h1>\n\t[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView)<br \/>\n<\/h1>\n<p>\n\t\u5728\u672c\u7ae0\u7684GTK+\u7a0b\u5e8f\u8bbe\u8ba1\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u5411\u5927\u5bb6\u91cd\u70b9\u4ecb\u7ecd\u975e\u5e38\u5e38\u7528\u4e5f\u6709\u70b9\u590d\u6742\u7684\u6784\u4ef6\u2014\u2014GtkTreeView \u3002\n<\/p>\n<p>\n\t<b class=\"keyword\">GtkTreeView<\/b> \u6784\u4ef6\u662f\u4e00\u4e2a\u9ad8\u7ea7\u7684\u6784\u4ef6\uff0c\u5229\u7528\u4ed6\u4f60\u5c31\u53ef\u4ee5\u5236\u4f5c\u51fa\u6f02\u4eae\u7684\u666e\u901a\u5217\u8868\u6216\u8005\u662f\u6811\u72b6\u7684\u5217\u8868\u3002\u8fd9\u4e2a\u6784\u4ef6\u91cc\u53ef\u4ee5\u5305\u542b\u4e00\u6216\u8005\u591a\u884c\u3002\u4ed6\u7684\u6784\u67b6\u5462\uff1f\u6b63\u662f\u91c7\u7528\u4e86\u5927\u540d\u9f0e\u9f0e\u7684MVC (Model View Controller) \u8bbe&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[327],"tags":[],"class_list":["post-77","post","type-post","status-publish","format-standard","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView) - Wayne&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/weizn.net\/?p=77\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView) - Wayne&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView)    \u5728\u672c\u7ae0\u7684GTK+\u7a0b\u5e8f\u8bbe\u8ba1\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u5411\u5927\u5bb6\u91cd\u70b9\u4ecb\u7ecd\u975e\u5e38\u5e38\u7528\u4e5f\u6709\u70b9\u590d\u6742\u7684\u6784\u4ef6\u2014\u2014GtkTreeView \u3002    GtkTreeView \u6784\u4ef6\u662f\u4e00\u4e2a\u9ad8\u7ea7\u7684\u6784\u4ef6\uff0c\u5229\u7528\u4ed6\u4f60\u5c31\u53ef\u4ee5\u5236\u4f5c\u51fa\u6f02\u4eae\u7684\u666e\u901a\u5217\u8868\u6216\u8005\u662f\u6811\u72b6\u7684\u5217\u8868\u3002\u8fd9\u4e2a\u6784\u4ef6\u91cc\u53ef\u4ee5\u5305\u542b\u4e00\u6216\u8005\u591a\u884c\u3002\u4ed6\u7684\u6784\u67b6\u5462\uff1f\u6b63\u662f\u91c7\u7528\u4e86\u5927\u540d\u9f0e\u9f0e\u7684MVC (Model View Controller) \u8bbe...\" \/>\n<meta property=\"og:url\" content=\"http:\/\/weizn.net\/?p=77\" \/>\n<meta property=\"og:site_name\" content=\"Wayne&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-01-29T17:09:55+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"zinan\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/weizn.net\/#website\",\"url\":\"http:\/\/weizn.net\/\",\"name\":\"Wayne&#039;s Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/weizn.net\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/weizn.net\/?p=77#primaryimage\",\"inLanguage\":\"zh-Hans\",\"url\":\"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png\",\"contentUrl\":\"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/weizn.net\/?p=77#webpage\",\"url\":\"http:\/\/weizn.net\/?p=77\",\"name\":\"[\\u8f6c]GTK+\\u4e2d\\u7684\\u6811\\u72b6\\u5217\\u8868\\u6784\\u4ef6(GtkTreeView) - Wayne&#039;s Blog\",\"isPartOf\":{\"@id\":\"http:\/\/weizn.net\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/weizn.net\/?p=77#primaryimage\"},\"datePublished\":\"2014-01-29T17:09:55+00:00\",\"dateModified\":\"2014-01-29T17:09:55+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/weizn.net\/?p=77#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/weizn.net\/?p=77\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/weizn.net\/?p=77#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\\u9996\\u9875\",\"item\":\"http:\/\/weizn.net\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[\\u8f6c]GTK+\\u4e2d\\u7684\\u6811\\u72b6\\u5217\\u8868\\u6784\\u4ef6(GtkTreeView)\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/weizn.net\/?p=77#article\",\"isPartOf\":{\"@id\":\"http:\/\/weizn.net\/?p=77#webpage\"},\"author\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"headline\":\"[\\u8f6c]GTK+\\u4e2d\\u7684\\u6811\\u72b6\\u5217\\u8868\\u6784\\u4ef6(GtkTreeView)\",\"datePublished\":\"2014-01-29T17:09:55+00:00\",\"dateModified\":\"2014-01-29T17:09:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/weizn.net\/?p=77#webpage\"},\"wordCount\":96,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"image\":{\"@id\":\"http:\/\/weizn.net\/?p=77#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png\",\"articleSection\":[\"GTK\"],\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/weizn.net\/?p=77#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\",\"name\":\"zinan\",\"logo\":{\"@id\":\"http:\/\/weizn.net\/#personlogo\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView) - Wayne&#039;s Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/weizn.net\/?p=77","og_locale":"zh_CN","og_type":"article","og_title":"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView) - Wayne&#039;s Blog","og_description":"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView)    \u5728\u672c\u7ae0\u7684GTK+\u7a0b\u5e8f\u8bbe\u8ba1\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u5411\u5927\u5bb6\u91cd\u70b9\u4ecb\u7ecd\u975e\u5e38\u5e38\u7528\u4e5f\u6709\u70b9\u590d\u6742\u7684\u6784\u4ef6\u2014\u2014GtkTreeView \u3002    GtkTreeView \u6784\u4ef6\u662f\u4e00\u4e2a\u9ad8\u7ea7\u7684\u6784\u4ef6\uff0c\u5229\u7528\u4ed6\u4f60\u5c31\u53ef\u4ee5\u5236\u4f5c\u51fa\u6f02\u4eae\u7684\u666e\u901a\u5217\u8868\u6216\u8005\u662f\u6811\u72b6\u7684\u5217\u8868\u3002\u8fd9\u4e2a\u6784\u4ef6\u91cc\u53ef\u4ee5\u5305\u542b\u4e00\u6216\u8005\u591a\u884c\u3002\u4ed6\u7684\u6784\u67b6\u5462\uff1f\u6b63\u662f\u91c7\u7528\u4e86\u5927\u540d\u9f0e\u9f0e\u7684MVC (Model View Controller) \u8bbe...","og_url":"http:\/\/weizn.net\/?p=77","og_site_name":"Wayne&#039;s Blog","article_published_time":"2014-01-29T17:09:55+00:00","og_image":[{"url":"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png"}],"twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"zinan","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"9 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/weizn.net\/#website","url":"http:\/\/weizn.net\/","name":"Wayne&#039;s Blog","description":"","publisher":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/weizn.net\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"ImageObject","@id":"http:\/\/weizn.net\/?p=77#primaryimage","inLanguage":"zh-Hans","url":"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png","contentUrl":"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png"},{"@type":"WebPage","@id":"http:\/\/weizn.net\/?p=77#webpage","url":"http:\/\/weizn.net\/?p=77","name":"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView) - Wayne&#039;s Blog","isPartOf":{"@id":"http:\/\/weizn.net\/#website"},"primaryImageOfPage":{"@id":"http:\/\/weizn.net\/?p=77#primaryimage"},"datePublished":"2014-01-29T17:09:55+00:00","dateModified":"2014-01-29T17:09:55+00:00","breadcrumb":{"@id":"http:\/\/weizn.net\/?p=77#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["http:\/\/weizn.net\/?p=77"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/weizn.net\/?p=77#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"http:\/\/weizn.net\/"},{"@type":"ListItem","position":2,"name":"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView)"}]},{"@type":"Article","@id":"http:\/\/weizn.net\/?p=77#article","isPartOf":{"@id":"http:\/\/weizn.net\/?p=77#webpage"},"author":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"headline":"[\u8f6c]GTK+\u4e2d\u7684\u6811\u72b6\u5217\u8868\u6784\u4ef6(GtkTreeView)","datePublished":"2014-01-29T17:09:55+00:00","dateModified":"2014-01-29T17:09:55+00:00","mainEntityOfPage":{"@id":"http:\/\/weizn.net\/?p=77#webpage"},"wordCount":96,"commentCount":0,"publisher":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"image":{"@id":"http:\/\/weizn.net\/?p=77#primaryimage"},"thumbnailUrl":"http:\/\/www.weizn.net\/content\/uploadfile\/201401\/a6212a2fb66f3c6e676119dccb793a7620140129171157.png","articleSection":["GTK"],"inLanguage":"zh-Hans","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/weizn.net\/?p=77#respond"]}]},{"@type":["Person","Organization"],"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264","name":"zinan","logo":{"@id":"http:\/\/weizn.net\/#personlogo"}}]}},"_links":{"self":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts\/77","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=77"}],"version-history":[{"count":0,"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts\/77\/revisions"}],"wp:attachment":[{"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=77"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=77"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=77"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}