Как установить свойство enum для объекта GLib? - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь установить свойство перечисления "ellipsize" для объекта GtkCellRendererText .

Я пытаюсь использовать 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

Как получить идентификатор типа для enum PangoEllipsizeMode, который получается из G_TYPE_ENUM?

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Вам нужно инициализировать контейнер GValue тем типом перечисления, который ожидает свойство. G_TYPE_ENUM - это общий абстрактный тип перечисления.

Свойство "ellipsize" GtkCellRendererText ожидает значение перечисления 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);
1 голос
/ 24 октября 2019

Использование g_object_set вместо этого работает:

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