gtk back按钮未从网格中删除,liststore treeview行未显示为已满

gtk back按钮未从网格中删除,liststore treeview行未显示为已满,c,linux,list,gtk,C,Linux,List,Gtk,我有两个顾虑: 在一个页面中,当我单击列表项时,另一个带有按钮的列表会添加到网格中,但当我按下按钮时,第一页会返回,但返回按钮不会从网格中删除 列表存储项未完整显示,它被截断 如何显示完整列表 #include <gtk/gtk.h> #include <glib.h> #include <stdlib.h> GtkWidget *scrolledwindow; struct param { GtkWidget* grid; GtkWidget

我有两个顾虑:

  • 在一个页面中,当我单击列表项时,另一个带有按钮的列表会添加到网格中,但当我按下按钮时,第一页会返回,但返回按钮不会从网格中删除

  • 列表存储项未完整显示,它被截断

  • 如何显示完整列表

    #include <gtk/gtk.h>
    #include <glib.h>
    #include <stdlib.h>
    GtkWidget *scrolledwindow;
    struct param
    {
        GtkWidget* grid;
        GtkWidget* scrolledwindow;
        GtkWidget*newChild;
        GtkWidget*oldChild;
    };
    GtkWidget * init_tree();
    GtkWidget * init_tree2();
    static void destroy(GtkWidget *widget, gpointer data)
    {
      gtk_main_quit();
    }
    
    static void Back (GtkButton *button, gpointer   user_data)
    {
          struct param* parameters = (struct param*)user_data;
          gtk_container_remove(GTK_CONTAINER(parameters->scrolledwindow), parameters->oldChild);
          gtk_container_add(GTK_CONTAINER(parameters->scrolledwindow), parameters->newChild);
          gtk_grid_remove_row (GTK_GRID (parameters->grid),20);
          gtk_widget_show_all (GTK_WIDGET(parameters->scrolledwindow));
          gtk_widget_show_all (GTK_WIDGET(parameters->grid));
    
    
    }
    
    
    static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
    {
          struct param* parameters = (struct param*)user_data;
          //gtk_grid_insert_row ( GTK_GRID(grid),2);
          gtk_container_remove(GTK_CONTAINER(parameters->scrolledwindow), GTK_WIDGET(tree_view));
          gtk_container_add(GTK_CONTAINER(parameters->scrolledwindow), parameters->newChild);
          GtkWidget *button = gtk_button_new_with_label ("Back");
          gtk_grid_attach (GTK_GRID (parameters->grid), button, 0, 20, 2, 2);
          parameters->oldChild = parameters->newChild;
          parameters->newChild= init_tree();
          g_signal_connect (button, "clicked", G_CALLBACK (Back), parameters);
          gtk_widget_show_all (GTK_WIDGET(parameters->scrolledwindow));
          gtk_widget_show_all (GTK_WIDGET(parameters->grid));
    }
    
    GtkWidget * init_tree()
    {
    
        GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
        GtkTreeIter treeiter;
    
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Mandriva", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Aptosid", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "OpenSuSE", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Linux Mint", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Arch Linux", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Mandriva", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Aptosid", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "OpenSuSE", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Linux Mint", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Arch Linux", -1);
     GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
    
        GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
    
        GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Distributions",
                                                                                     cellrenderertext,
                                                                                     "text", 0,
                                                                                     NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
    
        return treeview;
    }
    
    GtkWidget * init_tree2()
    {
    
        GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
        GtkTreeIter treeiter;
    
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "a", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "b", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "c", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "d", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "e", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "f", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Aptosid", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "OpenSuSE", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Linux Mint", -1);
    
    gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Arch Linux", -1);
    
     GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
    
        GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
    
        GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Distributions",
                                                                                     cellrenderertext,
                                                                                     "text", 0,
                                                                                     NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
    
        return treeview;
    }
    
    int main(int argc, char *argv[])
    {
      gtk_init(&argc, &argv);
    
      GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
      g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
    
      GtkWidget *notebook = gtk_notebook_new();
      gtk_container_add(GTK_CONTAINER(window), notebook);
    
    
      int count;
      gchar *text;
    
      for (count = 1; count <= 5; count++)
        {
          GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
          text = g_strdup_printf("Page %d", count);
          GtkWidget *label = gtk_label_new(text);
          GtkWidget* grid = gtk_grid_new ();
          GtkWidget *scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
    
          gtk_widget_set_size_request(scrolledwindow, -1, 200);
    
          gtk_container_add(GTK_CONTAINER(vbox), grid/*scrolledwindow*/);
    
          //gtk_container_add(GTK_CONTAINER(grid), scrolledwindow);
          gtk_grid_attach (GTK_GRID (grid), scrolledwindow, 0, 0, 200, 10);
          //GtkWidget *textview = gtk_text_view_new();
          /* gtk_container_add(GTK_CONTAINER(scrolledwindow), textview); */
          GtkWidget* treeview = init_tree();
          GtkWidget* treeview2 = init_tree2();
          struct param* parameters = malloc(sizeof(struct param));
          parameters->scrolledwindow = scrolledwindow;
          parameters->grid = grid;
          parameters->newChild= treeview2;
          g_signal_connect(treeview, "row-activated", G_CALLBACK(replace_tab), (gpointer)parameters);
          gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview);
    
          gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
        }
    
      gtk_widget_show_all(window);
    
      gtk_main();
    
      return 0;
    }
    
    #包括
    #包括
    #包括
    GtkWidget*滚动窗口;
    结构参数
    {
    GtkWidget*网格;
    GtkWidget*滚动窗口;
    GtkWidget*新儿童;
    GtkWidget*oldChild;
    };
    GtkWidget*初始化树();
    GtkWidget*初始化树2();
    静态无效销毁(GtkWidget*小部件,gpointer数据)
    {
    gtk_main_quit();
    }
    静态无效返回(GTK按钮*按钮,gpointer用户数据)
    {
    struct param*参数=(struct param*)用户_数据;
    gtk_容器移除(gtk_容器(参数->滚动窗口)、参数->旧子对象);
    gtk_容器添加(gtk_容器(参数->滚动窗口)、参数->新建子项);
    gtk_网格删除_行(gtk_网格(参数->网格),20);
    gtk_小部件显示所有(gtk_小部件(参数->滚动窗口));
    gtk_小部件显示所有(gtk_小部件(参数->网格));
    }
    静态无效替换选项卡(GtkTreeView*树视图、GtkTreePath*路径、GtkTreeViewColumn*列、gpointer用户数据)
    {
    struct param*参数=(struct param*)用户_数据;
    //gtk_网格插入_行(gtk_网格(网格),2);
    gtk_容器移除(gtk_容器(参数->滚动窗口),gtk_小部件(树视图));
    gtk_容器添加(gtk_容器(参数->滚动窗口)、参数->新建子项);
    GtkWidget*button=gtk_button_new_,带_标签(“背面”);
    gtk_网格连接(gtk_网格(参数->网格),按钮,0,20,2,2);
    参数->旧子女=参数->新子女;
    参数->newChild=init_tree();
    g_信号连接(按钮“点击”,g_回调(返回),参数);
    gtk_小部件显示所有(gtk_小部件(参数->滚动窗口));
    gtk_小部件显示所有(gtk_小部件(参数->网格));
    }
    GtkWidget*init_树()
    {
    GtkListStore*liststore=gtk_list_store_new(1,G_TYPE_字符串);
    GtkTreeIter treeiter;
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“Mandriva”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk_列表_存储_集(liststore和treeiter,0,“Aptosid”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“OpenSuSE”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“LinuxMint”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“ArchLinux”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“Mandriva”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk_列表_存储_集(liststore和treeiter,0,“Aptosid”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“OpenSuSE”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“LinuxMint”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“ArchLinux”,-1);
    GtkWidget*treeview=gtk_tree_view_new_with_model(gtk_tree_model(liststore));
    GtkCellRenderer*CellRenderText=gtk_cell_renderer_text_new();
    GtkTreeViewColumn*treeviewcolumn=gtk_tree_view_column_new_,带有_属性(“分布”),
    CellRenderText,
    “文本”,0,
    无效);
    gtk树视图附加列(gtk树视图(treeview),treeview列);
    返回树视图;
    }
    GtkWidget*init_tree2()
    {
    GtkListStore*liststore=gtk_list_store_new(1,G_TYPE_字符串);
    GtkTreeIter treeiter;
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“a”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“b”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“c”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“d”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“e”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“f”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk_列表_存储_集(liststore和treeiter,0,“Aptosid”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“OpenSuSE”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“LinuxMint”,-1);
    gtk_列表_存储_附加(列表存储和树存储);
    gtk列表存储集(liststore和treeiter,0,“ArchLinux”,-1);
    GtkWidget*treeview=gtk_tree_view_new_with_model(gtk_tree_model(liststore));
    GtkCellRenderer*CellRenderText=gtk_cell_renderer_text_new();
    GtkTreeViewColumn*treeviewcolumn=gtk_tree_view_column_new_,带有_属性(“分布”),
    CellRenderText,
    “文本”,0,
    无效);
    gtk树视图附加列(gtk树视图(treeview),treeview列);
    返回树视图;
    }
    int main(int argc,char*argv[])
    {
    gtk_init(&argc,&argv);
    GtkWidget*window=gtk_window_new(gtk_window_TOPLEVEL);
    gtk_窗口设置默认大小(gtk_窗口(窗口),200200);
    g_信号_连接(窗口,“销毁
    
    #include <gtk/gtk.h>
    #include <glib.h>
    #include <stdlib.h>
    GtkWidget *scrolledwindow;
    struct param
    {
        GtkWidget* backbutton;
        GtkWidget* scrolledwindow;
        GtkWidget*newChild;
        GtkWidget*oldChild;
    };
    GtkWidget * init_tree();
    GtkWidget * init_tree2();
    static void destroy(GtkWidget *widget, gpointer data)
    {
      gtk_main_quit();
    }
    
    static void Back (GtkButton *button, gpointer   user_data)
    {
          struct param* parameters = (struct param*)user_data;
          gtk_widget_hide(GTK_WIDGET(parameters->scrolledwindow));
          gtk_container_remove(GTK_CONTAINER(parameters->scrolledwindow), GTK_WIDGET(parameters->newChild));
          gtk_container_add(GTK_CONTAINER(parameters->scrolledwindow), parameters->oldChild);
          gtk_widget_hide (GTK_WIDGET(parameters->backbutton));
          gtk_widget_show_all (GTK_WIDGET(parameters->scrolledwindow));
    }
    
    
    static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
    {
          struct param* parameters = (struct param*)user_data;
          gtk_widget_hide(GTK_WIDGET(parameters->scrolledwindow));
          gtk_container_remove(GTK_CONTAINER(parameters->scrolledwindow), GTK_WIDGET(tree_view));
          gtk_container_add(GTK_CONTAINER(parameters->scrolledwindow), parameters->newChild);
          gtk_widget_show (GTK_WIDGET(parameters->backbutton));
          gtk_widget_show_all (GTK_WIDGET(parameters->scrolledwindow));
    }
    
    GtkWidget * init_tree()
    {
    
        GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
        GtkTreeIter treeiter;
    
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Mandriva", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Aptosid", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "OpenSuSE", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Linux Mint", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Arch Linux", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Mandriva", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Aptosid", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "OpenSuSE", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Linux Mint", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Arch Linux", -1);
        GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
    
        GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
    
        GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Distributions",
                                                                                     cellrenderertext,
                                                                                     "text", 0,
                                                                                     NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
    
        return treeview;
    }
    
    GtkWidget * init_tree2()
    {
    
        GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
        GtkTreeIter treeiter;
    
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "a", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "b", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "c", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "d", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "e", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "f", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Aptosid", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "OpenSuSE", -1);
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Linux Mint", -1);
    
        gtk_list_store_append(liststore, &treeiter);
        gtk_list_store_set(liststore, &treeiter, 0, "Arch Linux", -1);
    
        GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
    
        GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
    
        GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Distributions",
                                                                                     cellrenderertext,
                                                                                     "text", 0,
                                                                                     NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
    
        return treeview;
    }
    
    int main(int argc, char *argv[])
    {
      gtk_init(&argc, &argv);
    
      GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
      g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
    
      GtkWidget *notebook = gtk_notebook_new();
      gtk_container_add(GTK_CONTAINER(window), notebook);
    
    
      int count;
      gchar *text;
    
      for (count = 1; count <= 5; count++)
        {
          text = g_strdup_printf("Page %d", count);
          GtkWidget *label = gtk_label_new(text);
    
          GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
          GtkWidget *scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
    
          GtkWidget *backbutton = gtk_button_new_with_label ("Back");
          gtk_widget_set_no_show_all (backbutton, TRUE);
    
          gtk_box_pack_start (GTK_BOX(vbox), scrolledwindow, TRUE, TRUE, 0);
          gtk_box_pack_end (GTK_BOX(vbox), backbutton, FALSE, FALSE, 0);
    
    
          GtkWidget* treeview = init_tree();
          GtkWidget* treeview2 = init_tree2();
          struct param* parameters = malloc(sizeof(struct param));
          parameters->backbutton = backbutton;
          parameters->scrolledwindow = scrolledwindow;
          parameters->oldChild= treeview;
          parameters->newChild= treeview2;
    
          g_signal_connect(treeview, "row-activated", G_CALLBACK(replace_tab), (gpointer) parameters);
          g_signal_connect(backbutton, "clicked", G_CALLBACK(Back), (gpointer) parameters);
    
          gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview);
          gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
        }
    
      gtk_widget_show_all(window);
    
      gtk_main();
    
      return 0;
    }