gtk_widget_set_realize()的作用是什么,什么时候要用到
如题
在下面的代码中,好像有无gtk_widget_realize(dialog);运行的结果都一样?这是为什么
#include <gtk/gtk.h>
#include <glib.h>
GtkWidget *close_button;
GtkWidget *text_button;
GtkWidget *icon_button;
GtkWidget *both_button;
GtkWidget *tooltips_button;
void radio_event(GtkWidget* widget,gpointer data)
{
if(GTK_TOGGLE_BUTTON(text_button)->active)
gtk_toolbar_set_style(GTK_TOOLBAR(data),GTK_TOOLBAR_TEXT);
if(GTK_TOGGLE_BUTTON(icon_button)->active)
gtk_toolbar_set_style(GTK_TOOLBAR(data),GTK_TOOLBAR_ICONS);
if(GTK_TOGGLE_BUTTON(both_button)->active)
gtk_toolbar_set_style(GTK_TOOLBAR(data),GTK_TOOLBAR_BOTH);
}
void toggle_event(GtkWidget *widget,gpointer data)
{
gtk_toolbar_set_tooltips(GTK_TOOLBAR(data),
GTK_TOGGLE_BUTTON(widget)->active);
}
int main(int argc,char *argv[])
{
GtkWidget* dialog;
GtkWidget* handlebox;
GtkWidget *toolbar;
GtkWidget *iconw;
gtk_init(&argc,&argv);
dialog = gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog),"GTKToolbar Tutorial");
gtk_widget_set_size_request(GTK_WIDGET(dialog),600,300);
GTK_WINDOW(dialog)->allow_shrink = TRUE;
g_signal_connect(G_OBJECT(dialog),"delete_event",
G_CALLBACK(gtk_main_quit),NULL);
// gtk_widget_realize(dialog);
handlebox = gtk_handle_box_new();
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
handlebox,FALSE,FALSE,5);
toolbar = gtk_toolbar_new();
gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar),GTK_ORIENTATION_HORIZONTAL);
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),GTK_TOOLBAR_BOTH);
gtk_container_set_border_width(GTK_CONTAINER(toolbar),5);
gtk_toolbar_set_space_size(GTK_TOOLBAR(toolbar),5);
gtk_container_add(GTK_CONTAINER(handlebox),toolbar);
iconw = gtk_image_new_from_file("gtk.xpm");
close_button =
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
"Close",
"Close this app",
"private",
iconw,
GTK_SIGNAL_FUNC(gtk_main_quit),
NULL);
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
iconw = gtk_image_new_from_file("gtk.xpm");
icon_button = gtk_toolbar_append_element(
GTK_TOOLBAR(toolbar),
GTK_TOOLBAR_CHILD_RADIOBUTTON,
NULL,
"Icon",
"Only icons in toolbar",
"private",
iconw,
GTK_SIGNAL_FUNC(radio_event),
toolbar);
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
iconw = gtk_image_new_from_file("gtk.xpm");
text_button = gtk_toolbar_append_element(
GTK_TOOLBAR(toolbar),
GTK_TOOLBAR_CHILD_RADIOBUTTON,
icon_button,
"Text",
"Only Text in toolbar",
"private",
iconw,
GTK_SIGNAL_FUNC(radio_event),
toolbar);
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
iconw = gtk_image_new_from_file("gtk.xpm");
both_button = gtk_toolbar_append_element(
GTK_TOOLBAR(toolbar),
GTK_TOOLBAR_CHILD_RADIOBUTTON,
text_button,
"Both",
"Both in toolbar",
"private",
iconw,
GTK_SIGNAL_FUNC(radio_event),
toolbar);
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(both_button),TRUE);
iconw = gtk_image_new_from_file("gtk.xpm");
tooltips_button = gtk_toolbar_append_element(
GTK_TOOLBAR(toolbar),
GTK_TOOLBAR_CHILD_TOGGLEBUTTON,
NULL,
"Tooltips",
"Show tooltips",
"private",
iconw,
GTK_SIGNAL_FUNC(toggle_event),
toolbar);
gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tooltips_button),TRUE);
gtk_widget_show(toolbar);
gtk_widget_show(handlebox);
gtk_widget_show(dialog);
gtk_main();
return 0;
}
还有一个问题就是在编译的时候出现(.text+0x2bc): undefined reference to `gtk_toolbar_set_space_size'
collect2: ld 返回 1
不知道是什么错误?