Показать GVariant в GtkTreeView - PullRequest
       5

Показать GVariant в GtkTreeView

0 голосов
/ 09 марта 2019

У меня проблема с сохранением и последующим чтением значений типа 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?Спасибо.

...