У меня проблема с сохранением и последующим чтением значений типа uint16 в GtkListStore.Этот GtkListStore также используется в качестве модели для GtkTreeView, и значение uint16 также должно отображаться в виде столбца.
Я устранял причудливое поведение, пока не выяснил, что проблема связана с передачей переменной guint16 в gtk_tree_model_get () , который может быть определен только как G_TYPE_UINT в ListStore, который эффективно представляет собой 32-разрядное целое число без знака.
Однако, поскольку мне приходится полагаться на тип переменной uint16, я попыталсячтобы обойти проблему, обернув ее в GVariant.
Пока работает.Странное поведение исправлено таким образом.Тем не менее, теперь у меня есть проблемы для отображения этих значений в TreeView.При запуске приложения я получаю следующее сообщение об ошибке:
GLib-GObject-WARNING **: невозможно установить свойство 'text' типа 'gchararray' из значения типа 'GVariant'
Вот код, как GtkListStore определяется и заполняется GVariant:
static void set_initial_value(void)
{
GtkTreeIter iter;
GVariant *gv_uint16;
if (store == NULL) {
store = gtk_list_store_new(1, G_TYPE_VARIANT);
}
gv_uint16 = g_variant_new_uint16((guint16)42);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, gv_uint16, -1);
}
А вот как определяется столбец в TreeView:
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes("Number", renderer,
"text", 0, NULL);
gtk_tree_view_column_set_sort_column_id(column, 0);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
У кого-нибудь есть идея, как отобразить это значение GVariant в TreeView?Спасибо.