Gtk Properties(1)
Gtk Properties(2)
Gtk Properties(3)
重新install property
可以看看源码如何install property,gtkbutton.c
#include <gtk/gtk.h>
enum
{
PROP_0,
PROP_EXIT
};
static GtkWidget *createWindow(gint, gint, gchar *);
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window;
GtkWidget *button;
GObjectClass *object_class;
GParamSpec *pspec;
/// *** window
window = createWindow(200, 200, "Properties");
/// ***button
// button = gtk_button_new_with_label("Click");
button = gtk_button_new();
/// ***
object_class = G_OBJECT_GET_CLASS(button);
/// ***
pspec = g_param_spec_string("exit",
"EXIT",
"This is the Exit message Label",
NULL,
G_PARAM_READABLE | G_PARAM_WRITABLE);
/// *** 不知为何会出错,这句代码会使程序崩溃
g_object_class_install_property(object_class, PROP_EXIT, pspec);
/// ***
g_object_set(button, "exit", "Close", NULL);
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);
gtk_container_set_border_width(GTK_CONTAINER(window), 25);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
return window;
}