W programie Glade utwórz nowy projekt, następnie utwórz okno ustawiając tytuł "Kurs Glade - 2". Kolejne czynności:
1. Utwórz pionową skrzynkę z 3 elementami.
2. W środkowym elemencie pionowej skrzynki utwórz poziomą skrzynkę z 2 elementami.
Zapisz projekt jako
kurs2.ui1. Utwórz pasek menu wstawiając go w 1 elemencie pinowej skrzynki.
2. Utwórz etykiete
label1 w 1 elemencie poziomej skrzyni oraz utwórz etykiete
label2 3 elemencie pinowej skrzynki.
3. Utwórz wejście tekstowe (GtkEntry) w 2 elemencie poziomej skrzyni.
1. W kontrolce
label1 ustaw tekst "Wprowadź tekst".
2. W kontrolce
label2 usuń zawartość, aby nie wyświetlała tekstu. Wykorzystamy go w programie do wyświetlania tekstu.
Ponieważ wykorzystamy tylko menu
Plik usuń pozostałe:
Menu Edycja można usunąć dwoma sposobami:
1. Zaznacz lewym przyciskiem myszy menu
Edycja, następnie wciśnij prawy klawisz mysz. Pojawi się menu, odszukaj w nim i zaznacz opcję Usuń.
2. Podobnie jak w pierwszym sposobie kliknij menu
Edycja, z prawej strony zostanie podśietlone
menuitem2. Usuń zaznaczone menuitem2.
Postępuj analogicznie z
Widok i
PomocSkojarzenie opcji menu
Zakończ z funkcja gtk_main_quit:
1. Wybierz opcję
Zakończ w menu
Plik.
2. W zakładce Sygnały odszukaj sygnału
activate i skojarz go z funkcją gtk_main_quit.
1. Wybierz
entry1 w liście kontrolek \ widżetów, bądź poprostu kliknij lewym przyciskim na niej.
2. W zakładce Sygnały odszukaj sygnału
activate i skojarz go z zapropowaną nazwą funkcji z listy rozwijanej
on_entry1_activateZawartość pliku
kurs2.ui po wykonaniu powyższych czynności powinna zawierać:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Kurs Glade - 2</property>
<signal name="destroy" handler="gtk_main_quit" swapped="no"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuBar" id="menubar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="menuitem1">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Plik</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem1">
<property name="label">gtk-new</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem2">
<property name="label">gtk-open</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem3">
<property name="label">gtk-save</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem4">
<property name="label">gtk-save-as</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem5">
<property name="label">gtk-quit</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="gtk_main_quit" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Wprowadź tekst</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<signal name="activate" handler="on_entry1_activate" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Zawartość pliku
funkcje_zwrotne.h:
#include <gtk/gtk.h>
extern GtkWidget * label;
void on_entry1_activate( GtkEntry * entry, gpointer data );
Zawartość pliku
funkcje_zwrotne.c:
#include "funkcje_zwrotne.h"
void on_entry1_activate( GtkEntry * entry, gpointer data )
{
const gchar * tekst;
gchar * wypisz;
gtk_label_set_text( GTK_LABEL( label ), wypisz );
tekst = gtk_entry_get_text( entry );
wypisz = g_strdup_printf( "Wpisano tekst: %s", tekst );
gtk_label_set_text( GTK_LABEL( label ), wypisz );
g_free( wypisz );
}
Zawartość pliku
main.c:
#include <gtk/gtk.h>
#include "funkcje_zwrotne.h"
#define UI_FILE "kurs2.ui"
GtkWidget * label;
GtkWidget * utworz_okno( void )
{
GtkWidget * okno;
GtkBuilder * builder;
GError * error = NULL;
builder = gtk_builder_new();
if( !gtk_builder_add_from_file( builder, UI_FILE, & error ) )
{
g_warning( "Nie można wczytać plilu buildera: %s", error->message );
g_error_free( error );
}
gtk_builder_connect_signals( builder, NULL );
okno = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) );
label = GTK_WIDGET( gtk_builder_get_object( builder, "label2" ) );
g_object_unref( builder );
return okno;
}
int
main( int argc, char * argv[] )
{
GtkWidget * okno;
gtk_set_locale();
gtk_init( & argc, & argv );
okno = utworz_okno();
gtk_widget_show( okno );
gtk_main();
return 0;
}