尝试获取 GtkWidget 的 'Style' 列表

Trying to get 'Style' list for a GtkWidget

我正在努力获取 GtkWidget (GtkButton) 的 style 属性列表。到目前为止,这是我的代码:

#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
// Declare variables.
    GtkWidget *btn = gtk_button_new();
    guint *count = {0};
    GParamSpec **list = NULL;

// Initialize gtk.
    gtk_init(&argc, &argv);

// Get style properties.
    list = gtk_widget_class_list_style_properties(GTK_WIDGET_CLASS(btn), count);

// Exit cleanly.
    exit(EXIT_SUCCESS);
}

我得到一个干净的编译:

gcc -o gtk_test gtk_test.c `pkg-config --cflags --libs gtk+-3.0`

但是当 运行 时出现以下错误:

(process:72182): Gtk-CRITICAL **: 10:42:23.167: _gtk_style_provider_private_get_settings: assertion 'GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed

(process:72182): Gtk-CRITICAL **: 10:42:23.167: _gtk_style_provider_private_get_settings: assertion 'GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed

(process:72182): Gtk-CRITICAL **: 10:42:23.167: _gtk_style_provider_private_get_settings: assertion 'GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed
Segmentation fault

我认为我做的不对,但我找不到任何使用我理解的 gtk_widget_class_list_style_properties 的例子。我发现他们使用 klass 和第一个参数。但我永远找不到 klass 声明的位置,甚至找不到它是什么。

有人可以帮我指明正确的方向吗?我去了 gtk 网站并在 GTK_WIDGET_CLASS 上进行了搜索,结果一无所获!至少可以说非常令人沮丧。

我应该为 GTK_WIDGET_CLASS 参数使用什么来 return GtkButton 的样式属性?

我试用了您的示例代码。实际上,看起来您的宏不正确。而不是:

GTK_WIDGET_CLASS(btn)

尝试:

GTK_WIDGET_GET_CLASS(btn)

我试过了,但没有收到关键消息。

此致。