学习记录一下关于
Properties
的知识和例子
#include <gtk/gtk.h>
static GtkWidget *createWindow(gint, gint, gchar *);
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window;
GtkWidget *button;
GParamSpec *pspec;
const gchar *const property = "relief";
/// *** window
window = createWindow(200, 200, "Properties");
/// ***button
button = gtk_button_new_with_label("Click");
g_object_set(button, "margin", 20, NULL);
pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(button), property);
if (G_IS_PARAM_SPEC(pspec))
{
if (pspec == NULL)
g_print("There is no property \"%s\" avaible for this object\n", property);
else
{
const GValue *value;
const gchar *prop_name = g_param_spec_get_name(pspec);
g_print("the prop name is %s\n", prop_name);
g_object_set(button, prop_name, GTK_RELIEF_NONE, NULL);
GType gtype_value = G_PARAM_SPEC_VALUE_TYPE(pspec);
const gchar *property_name = g_type_name(gtype_value);
g_print("property_name is %s\n", property_name);
value = g_param_spec_get_default_value(pspec);
// g_object_set_property(G_OBJECT(button), prop_name, value);
}
}
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show_all(window);
gtk_main();
}
static GtkWidget *createWindow(gint width, gint height, gchar *title)
{
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request(window, width, height);
gtk_window_set_title(GTK_WINDOW(window), title);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
return window;
}