如何在GLib对象上设置枚举属性? [英] How do you set an enum property on a GLib object?

查看:138
本文介绍了如何在GLib对象上设置枚举属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 GtkCellRendererText 对象.

我正在尝试按以下方式使用g_object_set_property:

I am trying to use g_object_set_property as follows:

GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();

GValue val = G_VALUE_INIT;
g_value_init (&val, G_TYPE_ENUM);
g_value_set_enum (&val, PANGO_ELLIPSIZE_END);
g_object_set_property (G_OBJECT(renderer), "ellipsize", &val);

但是,我在运行时收到一条错误消息:

However, I get an error message at run time:

(infog:27114): GLib-GObject-WARNING **: 12:24:29.848: ../../../../gobject/gvalue.c:188: cannot initialize GValue with type 'GEnum', this type is abstract with regards to GValue use, use a more specific (derived) type

如何获取 enum PangoEllipsizeMode的类型ID 源自G_TYPE_ENUM?

How do I get the type ID for enum PangoEllipsizeMode that derives from G_TYPE_ENUM?

推荐答案

您需要使用属性期望的枚举类型来初始化GValue容器. G_TYPE_ENUM是通用的抽象枚举类型.

You need to initialise the GValue container with the type of the enumeration that the property expects. G_TYPE_ENUM is the generic, abstract enumeration type.

GtkCellRendererText的"ellipsize"属性需要一个PangoEllipsizeMode枚举值,其GType为PANGO_TYPE_ELLIPSIZE_MODE.

The "ellipsize" property of GtkCellRendererText expects a PangoEllipsizeMode enumeration value, which has a GType of PANGO_TYPE_ELLIPSIZE_MODE.

GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();

GValue val = G_VALUE_INIT;

g_value_init (&val, PANGO_TYPE_ELLIPSIZE_MODE);
g_value_set_enum (&val, PANGO_ELLIPSIZE_END);

g_object_set_property (G_OBJECT(renderer), "ellipsize", &val);

// Always unset your value to release any memory that may be associated with it
g_value_unset (&val);

这篇关于如何在GLib对象上设置枚举属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆