从 GValue 中获取对象
Getting objects out of a GValue
因为gtk_style_context_get_background_color从gtk v3.16版本开始被弃用我想读出以下样式-属性:GTK_STYLE_PROPERTY_BACKGROUND_COLOR
目前我的代码如下所示:
GdkRGBA *color;
...
GValue value = G_VALUE_INIT;
gtk_style_context_get_property (context,GTK_STYLE_PROPERTY_BACKGROUND_COLOR, state, &value);
color = g_value_get_object (&value);
不过我好像做错了。在运行时,我只得到以下 GLib-GObject-CRITICAL:
(thunar:6564): GLib-GObject-CRITICAL **: g_value_get_object: assertion
'G_VALUE_HOLDS_OBJECT (value)' failed
那么我如何利用包含更复杂数据类型的 gtk 属性?
编辑:
这是现在对我有用的完整解决方案:
GtkStateFlags state;
GdkRGBA *color;
GtkStyleContext *context = gtk_widget_get_style_context (widget);
// get the color
gtk_style_context_get (context, GTK_STATE_FLAG_SELECTED, GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &color, NULL);
// do something with the color
gdk_cairo_set_source_rgba (cr, color);
// dont forget to free it afterwards !! (Otherwise segfaults may occur)
gdk_rgba_free (color);
您可以完全跳过 GValue:
GdkRGBA *c;
gtk_style_context_get (context,
GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &c,
NULL);
// ...
gdk_rgba_free (c);
因为gtk_style_context_get_background_color从gtk v3.16版本开始被弃用我想读出以下样式-属性:GTK_STYLE_PROPERTY_BACKGROUND_COLOR
目前我的代码如下所示:
GdkRGBA *color;
...
GValue value = G_VALUE_INIT;
gtk_style_context_get_property (context,GTK_STYLE_PROPERTY_BACKGROUND_COLOR, state, &value);
color = g_value_get_object (&value);
不过我好像做错了。在运行时,我只得到以下 GLib-GObject-CRITICAL:
(thunar:6564): GLib-GObject-CRITICAL **: g_value_get_object: assertion 'G_VALUE_HOLDS_OBJECT (value)' failed
那么我如何利用包含更复杂数据类型的 gtk 属性?
编辑: 这是现在对我有用的完整解决方案:
GtkStateFlags state;
GdkRGBA *color;
GtkStyleContext *context = gtk_widget_get_style_context (widget);
// get the color
gtk_style_context_get (context, GTK_STATE_FLAG_SELECTED, GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &color, NULL);
// do something with the color
gdk_cairo_set_source_rgba (cr, color);
// dont forget to free it afterwards !! (Otherwise segfaults may occur)
gdk_rgba_free (color);
您可以完全跳过 GValue:
GdkRGBA *c;
gtk_style_context_get (context,
GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &c,
NULL);
// ...
gdk_rgba_free (c);