Таблица 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 */