2017-03-08 14 views
1

このコードは、ラベル付きウィンドウを作成するプログラムを作成します。ラベルをクリックすると、プログラムは引数として渡されたバッファのfprintfをg_signal_connect(G_OBJECT(eventbox), "button_press_event", G_CALLBACK(on_event_clicked), buffer)として実行します。以前はプログラムはバッファー文字列 "Hello Word"を入れ、プログラムはこのメッセージを出力しますが、プログラムは文字化けした文字しか印刷しませんでした。どこが間違っている?GTK - GtkEventBoxに引数を渡す方法

#include <gtk/gtk.h> 
#include <stdlib.h> 
#include <string.h> 
void on_event_clicked (GtkWidget* widget, gpointer user_data); 

int main (int argc, char **argv) { 
    GtkWidget *window; 
    GtkWidget *eventbox; 
    GtkWidget *label; 
    char*  buffer = malloc(sizeof(char)*10); 

    strcpy(buffer, "Hello Word\0"); 

    gtk_init (&argc,&argv); 

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    label = gtk_label_new ("Hello Word"); 
    eventbox = gtk_event_box_new(); 

    gtk_container_add (GTK_CONTAINER(eventbox), label); 
    gtk_container_add (GTK_CONTAINER(window), eventbox); 
    gtk_widget_show_all (window); 

    g_signal_connect(G_OBJECT(window), "destroy", 
        G_CALLBACK(gtk_main_quit), NULL); 

    g_signal_connect(G_OBJECT(eventbox), "button_press_event", 
        G_CALLBACK(on_event_clicked), buffer); 

    gtk_main(); 

    return 0; 
} 

void on_event_clicked (GtkWidget *widget, gpointer user_data) { 
    char* pn = user_data; 
    fprintf(stderr, "%s\n", pn); 
} 

答えて

2

on_event_clicked()のプロトタイプは間違っていますが、GTK +が予期しているものと一致しません。

それは次のようになります。

gboolean user_function (GtkWidget *widget, GdkEvent *event, gpointer user_data); 

あなたの機能に不足している引数を追加し、また戻り値の要件に対処する必要があります。真剣にread the signal documentationを忘れないでください。

+0

あなたは正しいです: ') –

+0

愚かなエラーです。ありがとうございました –

関連する問題