在GtkTreeView中显示GVariant

时间:2019-03-09 09:18:53

标签: c gtk3

我很难在GtkListStore中存储并稍后从类型 uint16 中读取值。此GtkListStore也可用作GtkTreeView的模型,并且uint16值也应显示为列。

我已经对奇怪的行为进行了故障排除,直到发现为止,问题是由于将guint16变量传递给 gtk_tree_model_get(),该变量只能在32位的ListStore中定义为G_TYPE_UINT有效的无符号整数。

但是,由于我必须依赖uint16变量类型,因此我试图通过将其包装在GVariant中来解决该问题。

到目前为止有效。奇怪的行为是通过这种方式解决的。但是,现在我遇到了在TreeView中显示这些值的问题。启动应用程序时,出现以下错误消息:

  

GLib-GObject-WARNING **:无法从'GVariant'类型的值设置'gchararray'类型的属性'text'

以下代码是如何定义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);

有人知道如何在TreeView中显示此GVariant值吗? 谢谢。

0 个答案:

没有答案