gtk_tree_model_foreach: утверждение 'GTK_IS_TREE_MODEL (модель)' не выполнено - PullRequest
0 голосов
/ 11 мая 2019

Я использую GTK 3 на macOS. Я хочу перебрать GtkListStore.

У меня есть следующий код:

...

GtkListStore *listStore = gtk_list_store_new(N_COLUMNS,      // 2
                               G_TYPE_LONG,    // quantity
                               G_TYPE_STRING); // name

// I stripped some lines but I have some `gtk_list_store_append` and `gtk_list_store_set` elsewhere.

gtk_tree_model_foreach(GTK_TREE_MODEL(listStore), foreach_func, NULL);

gboolean foreach_func(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) {
    gchar *name, *tree_path_str;
    glong quantity;

    gtk_tree_model_get(model, iter,
                       QTY_COLUMN, &quantity,
                       NAME_COLUMN, &name,
                       -1);

    tree_path_str = gtk_tree_path_to_string(path);

    g_print("Row %s: %ld %s\n", tree_path_str,
            quantity, name);

    g_free(tree_path_str);

    g_free(name);

    return FALSE;
}

У меня есть ошибка в этой строке:

gtk_tree_model_foreach(GTK_TREE_MODEL(listStore), foreach_func, NULL);

Ошибка:

gtk_tree_model_foreach: assertion 'GTK_IS_TREE_MODEL (model)' failed

Прототип gtk_tree_model_foreach:

void
gtk_tree_model_foreach (GtkTreeModel *model,
                        GtkTreeModelForeachFunc func,
                        gpointer user_data);

Так что в моем коде полученный model не является GtkTreeModel. Дело в том, что я бросил свой GtkListStore на GtkTreeModel с GTK_TREE_MODEL(listStore).

Я здесь потерян, что мне не хватает?

РЕДАКТИРОВАТЬ: ОК, оказывается, этот код действителен, ошибка была в другом месте. Я сделал ошибку в прототипе функции, которую я вызываю с помощью g_signal_connect. Это делает мой listStore NULL, поэтому приведение к GtkTreeModel работало, но все равно было NULL, что не понравилось GTK_IS_TREE_MODEL.

Подробнее здесь: https://mstdn.io/@angristan/102078459015470376

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...