我很难在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值吗? 谢谢。