2013年2月27日水曜日

[GTK+]Glade で Hello World 作成

  1. Glade を起動して Top level に Main window, Container に 3 段の virtual box (垂直ボックス), その中に Text entry, label, button を配置する
  2. Main window の名前を Hello World にする。Entry, Label, Button はデフォルトのまま entry1, label1, button1 としておく
  3. button1 のシグナル clicked にハンドラ button1_clicked_cb を登録する
  4. 作成した glade ファイルを保存する (hello_world.glade)
  5. hello_world.c を作成する。main 内で hello_world.glade を読み出して各 widget を紐付ける
    Example: hello_world.c
    #include <gtk/gtk.h>
    
    GtkBuilder *builder;
    GtkWidget *label1;
    GtkWidget *entry1;
    
    G_MODULE_EXPORT void button1_clicked_cb(GtkWidget *widget, gpointer data)
    {
        const gchar *text;
        char buf[256];
    
        g_print("%s is called\n", __FUNCTION__);
        text = gtk_entry_get_text(GTK_ENTRY(entry1));
        sprintf(buf, "%s", text);
        gtk_label_set_text(GTK_LABEL(label1), buf);
    }
    
    int main(int argc, char **argv)
    {
        GtkWidget *window;
        GError *error = NULL;
        GtkSettings *settings;
    
        gtk_init(&argc, &argv);
    
        /* Create a new GtkBuilder object */
        builder = gtk_builder_new();
    
        if (!gtk_builder_add_from_file(builder, "hello_world.glade", &error)) {
         g_warning("%s", error->message);
         g_free(error);
         return 1;
        }
    
        settings = gtk_settings_get_default();
    // gtk_settings_set_string_property (settings, "gtk-font-name", "MS Mincho 14", "");
        gtk_settings_set_string_property (settings, "gtk-font-name", "Sazanami Gothic 14", "");
    
        window = GTK_WIDGET(gtk_builder_get_object(builder, "Hello World"));
        label1 = GTK_WIDGET(gtk_builder_get_object(builder, "label1"));
        entry1 = GTK_WIDGET(gtk_builder_get_object(builder, "entry1"));
    
        gtk_builder_connect_signals(builder, NULL);
        g_object_unref(G_OBJECT(builder));
        gtk_widget_show(window);
    
        gtk_main();
    
        return 0;
    }
    
  6. コンパイル
    Makefile の CFLAGS に CFLAGS に gmodule-2.0 を付ける。LDFLAGS に -mwindows を付けると DOS 窓を開くことなくプログラムが実行できるようになる
    Example: Makefile
    CC=gcc
    PKG_CONFIG = c:/usr/MinGW/bin/pkg-config
    CFLAGS = -Wall -DGTK_DISABLE_DEPRECATED `$(PKG_CONFIG) --cflags gtk+-2.0 gmodule-2.0`
    LDFLAGS = `$(PKG_CONFIG) --libs gtk+-2.0` -mwindows
    TARGET = \
        hello_world.exe
    
    .SUFFIXES: .exe .c .o
    
    # $@ は生成しようとしているターゲット名
    # $< は依存しているファイル
    .c.o:
        $(CC) $(CFLAGS) -c -o $@ $<
    
    .o.exe:
        $(CC) -o $@ $< $(LDFLAGS)
    
    default: $(TARGET)
    
    pkgconfig:
        $(PKG_CONFIG) --cflags gtk+-2.0
        $(PKG_CONFIG) --libs gtk+-2.0
    
    clean:
        rm -rf *.o *.exe
    
  7. 実行結果

0 件のコメント:

コメントを投稿