Search code examples
treeviewgtkglade

How to add data to list_store when I have create a treeview in Glade


I have solved a previous problem in signal connect, but in another I am confused by a further problem. I have created a treeview in Glade and it's succeeded when I operate the data in list_store in Glade. However, I failed when I wanted to add data by coding. The following is the main code. I will be very appreciative if you can help me.

#include "gtk/gtk.h"

typedef struct _MainDate{

    GtkWidget *main_window;
    GtkWidget *delete_button;
    GtkWidget *choose_button;
    GtkListStore *liststore_1;
    GtkTreeViewColumn *name;
    GtkTreeViewColumn *phone;
    GtkTreeView *view;
}MainDate;


int main(int argc,char *argv[]){

    GtkBuilder *builder;
    GtkTreeIter iter;
    MainDate *date;
    GError  *error = NULL;

    gtk_init(&argc,&argv);

    builder = gtk_builder_new();
   if(!(gtk_builder_add_from_file(builder,"main_window.glade",&error))){
        g_warning("%s",error->message);
        g_free(error);
        return 1;
    }

    date = g_slice_new(MainDate);

    date->main_window = GTK_WIDGET(gtk_builder_get_object(builder,"main_window"));
    date->liststore_1 = GTK_LIST_STORE(gtk_builder_get_object(builder,"main_window"));
    date->name = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"name"));
    date->phone = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"phone"));

    gtk_list_store_append(date->liststore_1,&iter);
    gtk_list_store_set(date->liststore_1,&iter,date->name,"陈婷婷",date->phone,"18202731442",-1);


    gtk_builder_connect_signals(builder,date);
    g_object_unref(builder);

    gtk_widget_show_all(date->main_window);
    gtk_main();

    g_slice_free(MainDate,date);

    return 0;
}

Solution

  • You are passing pointers to GtkTreeViewColumn to gtk_list_store_set(). This is wrong; it should be column numbers, with 0 being the first column. So for example, if the name column is column 0 and the phone column is column 1, then the line should be

    gtk_list_store_set(date->liststore_1,&iter,0,"陈婷婷",1,"18202731442",-1);