Ошибка при добавлении строк в GTKTreeView

GtkWidget *tree_view;
GtkListStore *tree_store;
GtkTreeModel *tree_model;
tree_store = gtk_list_store_new(4, G_TYPE_STRING,G_TYPE_STRING,G_TYPE_INT,G_TYPE_FLOAT);
tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(tree_store));
GtkTreeIter iter;
gtk_list_store_append(tree_store, &iter);

for(int j = 0; j < 2; j++) {
GValue value = {0};
g_value_init(&value, G_TYPE_STRING);
g_value_set_string(&value, "1.0");
gtk_list_store_set_value(tree_store, &iter, j, &value);
}
gtk_tree_model_iter_next(tree_model, &iter);

То, что я пытаюсь сделать, это переместить итератор в следующую строку, чтобы я мог вставить другую строку значений. Тем не менее, последняя строка приводит к segfault. Почему это?

2

Решение

Итератор должен быть сброшен между строками, но лучше использовать gtk_list_store_set, а не set_value.
Мое решение таково:

for(int i=0; i<num_rows; i++) {
GtkTreeIter iter;
gtk_list_store_append(tree_store, &iter);
for(int j = 0; j < 2; j++) {

GValue value = {0};
g_value_init(&value, G_TYPE_STRING);
g_value_set_string(&value, "1.0");
gtk_list_store_set(tree_store, &iter, j, "1.0", -1);
gtk_list_store_set(tree_store, &iter, j, "1.0", -1);
}

}

Таким образом, итератор воссоздается каждый раз, когда вставляется строка.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]