GTK4   ボタン

ホーム   C/C++チュートリアル  

ボタン

GUI プログラミングの中でウィンドウに次に大切なのがボタンでしょう。

ソースコード

以下のファイルを button.c という名前で記述してください。

button.c


#include <gtk/gtk.h>

static void
countup (GtkWidget *widget, GtkWidget *window)
{
	static int count = 0;
	char str[20];
	sprintf(str,"%d",++count);
	gtk_window_set_title(GTK_WINDOW(window), str);
}
static void
activate (GtkApplication *app,
		  gpointer        user_data)
{
	GtkWidget *window;
	GtkWidget *button;
	window = gtk_application_window_new(app);
	gtk_window_set_title(GTK_WINDOW(window), "0");
	gtk_window_set_default_size(GTK_WINDOW(window),200,133);
	button = gtk_button_new_with_label("Count up!");
	g_signal_connect(button,"clicked",G_CALLBACK(countup),window);
	gtk_window_set_child(GTK_WINDOW(window), button);
	gtk_window_present(GTK_WINDOW(window));
}
int
main(int argc, char **argv)
{
	GtkApplication *app;
	int status;
	app = gtk_application_new("jp.vivacocoa.count", G_APPLICATION_DEFAULT_FLAGS);
	g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
	status = g_application_run(G_APPLICATION(app), argc, argv);
	g_object_unref(app);
	return status;
}

コード説明

  1. static void countup (GtkWidget *widget, GtkWidget *window)
    ボタンをクリックした場合のリスナーです。第2引数で window のポインターを受け取ることに注意してください
  2. g_signal_connect(button,"clicked",G_CALLBACK(countup),window);
    button の clicked イベントと countup 関数を結びつけています。第4引数で window のポインター を渡しています。受け取る側の countup 関数の第1引数には関数を呼び出したもの、今回の場合は button のポインターが渡されます、そして countup 関数の第2引数に、g_signal_connect の第4引数の window のポインターが渡されます。
  3. gtk_window_set_child(GTK_WINDOW(window), button);
    window に button を設置しています。ウィンドウには1つのウィジェットしか設置できず、設置された ウィジェットはウィンドウいっぱいに広がります

コンパイルと実行

以下のとおりです。Windows の場合は通常版でも ARM64版 でも mingw64 で行ってください。


// コンパイル
cc `pkg-config --cflags gtk4` button.c -o button `pkg-config --libs gtk4`

もしくは

gcc $(pkg-config --cflags gtk4) -o button button.c $(pkg-config --libs gtk4)

// 実行
./button


235 visits
Posted: Mar. 15, 2025
Update: Mar. 21, 2025

ホーム   C/C++チュートリアル   目次