Таблица ListView с данными на GTK+

Господа, помогите пожалуйста разобраться, нужно создать таблицу на 5 столбцов с заголовками. Перерыл пол гугла не могу найти пример на C++. Все что я нашел это код ниже. Но из-за отсутствия мануала не понимаю как вставлять данные. Заранее спасибо!

GtkTreeStore *store;
        GtkWidget *tree;
        GtkTreeViewColumn *column;
        GtkCellRenderer *renderer;
        store = gtk_tree_store_new (N_COLUMNS,
                           G_TYPE_STRING,
                           G_TYPE_STRING,
                           G_TYPE_BOOLEAN);
        tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
        g_object_unref (G_OBJECT (store));
        renderer = gtk_cell_renderer_text_new ();
        g_object_set (G_OBJECT (renderer),
             "foreground", "red",
             NULL);
        column = gtk_tree_view_column_new_with_attributes ("Author", renderer,
                                                  "text", AUTHOR_COLUMN,
                                                  NULL);
        gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
        renderer = gtk_cell_renderer_text_new ();
        column = gtk_tree_view_column_new_with_attributes ("Title",
                                                  renderer,
                                                  "text", TITLE_COLUMN,
                                                  NULL);
        gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
        renderer = gtk_cell_renderer_toggle_new ();
        column = gtk_tree_view_column_new_with_attributes ("Checked out",
                                                  renderer,
                                                  "active", CHECKED_COLUMN,
                                                  NULL);
        gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
        gtk_container_add(GTK_CONTAINER(::app->ScroledWindow["Offers"]), tree);
        gtk_widget_show_all(tree);

Ответы (1 шт):

Автор решения: Yaroslav

Документация GTK3 достаточно своеобразна, но вроде все описано. Если смотреть всю документацию на ListView то есть пункт GtkListStore в котором описывается как вставлять данные в список.

код что бы добавлять данные в список

/*это структура данных списка задается количество колонок и тип этих колонок , 
при этом не обязательно прорисовывать все колонки. можно иметь 5 колонок а прорисовать только 4. 
Отличие GtkListStore от GtkTreeStore из второго можно делать вложенные списки*/
GtkListStore *store;
/*1 колонка id 
  2 колонка название
  3 колонка цена*/
store = gtk_list_store_new (3, G_TYPE_INT,G_TYPE_STRING,G_TYPE_STRING);
 /*здесь можно добавлять данные используя функции 
  gtk_list_store_append() gtk_list_store_set()*/

GtkWidget *tree;
/*Создаете отображение списка на основе модели*/
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
g_object_unref (G_OBJECT (store));

GtkCellRenderer *renderer;
/*это функции создания отрисовки ячеек */
renderer = gtk_cell_renderer_text_new ();
/*свойства отрисовки ячейки можно задавать здесь свойства описаны в GtkCellRendererText 
или использовать Theming in GTK+ задавать через файлы css*/
g_object_set (G_OBJECT (renderer),"foreground","red",NULL);

GtkTreeViewColumn *column;
/*эта функция создавая колонку соединяет между собой как рисовать ячейку
и номер колонки который нужно использовать из модели данных */
column = gtk_tree_view_column_new_with_attributes ("ID", renderer, "text", 0 ,NULL);
/*здесь добавляем колонку для отображения в списке 
  отрисовка колонок идет в том же порядке как вы их расположите в модели */
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);

renderer = gtk_cell_renderer_text_new ();
column =   gtk_tree_view_column_new_with_attributes("Название",renderer,"text", 1,NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);

renderer = gtk_cell_renderer_test_new ();
column = gtk_tree_view_column_new_with_attributes ("Цена",renderer,                                                  "test", 2,NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
/*добавляете отображение списка на основной виджет*/
gtk_container_add(GTK_CONTAINER(window), tree);
gtk_widget_show_all(tree);


/*где нужно добавить строки списка*/ 
GtkListModel * list_model;
GtkTreeIter list_iter;
/*Получаем какой список выбрал*/
GtkTreeSelection * select = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree));
/*получаем информацию о модели списка и итератор*/
gtk_tree_selection_get_selected(select, &list_model, &list_iter);

/*добавляем строку*/
gtk_list_store_append(GTK_LIST_STORE(list_model), &list_iter, NULL);
/*заполняем строку*/
gtk_list_store_set(GTK_LIST_STORE(list_model), &list_iter, 0, id, 1, "Название первое", 2, "Цена новая", -1);
/*заполнять можно и вовремя создания самого GtkTreeView */
→ Ссылка