【问题标题】:How do you set an enum property on a GLib object?如何在 GLib 对象上设置枚举属性?
【发布时间】:2019-10-24 11:30:44
【问题描述】:

我正在尝试在 GtkCellRendererText 对象上设置“ellipsize”枚举属性。

我正在尝试使用g_object_set_property,如下所示:

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);

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

(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

如何获取派生自G_TYPE_ENUMenum PangoEllipsizeMode 的类型ID?

【问题讨论】:

    标签: gtk gtk3 glib gobject pango


    【解决方案1】:

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

    GtkCellRendererText 的“ellipsize”属性需要 PangoEllipsizeMode 枚举值,其 GType 为 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);
    

    【讨论】:

    • 谢谢,不知怎的,我在查看的文档中错过了这个定义。
    【解决方案2】:

    使用g_object_set 代替有效:

    g_object_set (G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
    

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2017-03-05
      • 1970-01-01
      • 2016-09-16
      相关资源
      最近更新 更多