2

Webで回答を検索しても、問題は解決しません。

1つのセルをクリックした場合、GtkTableでイベントをスローしたくありません。

クリックイベントがないので、GtkButtonを受け入れます。クリック中にテーブル上のマウスの位置をキャッチするために、 GDK_BUTTON_PRESS_MASKGDK_BUTTON_RELEASE_MASKを実装したいと思いました。GtkDrawingAreaでうまく機能します!

以下のスニペットを試しましたが、何も起こりませんでした。誰かが私に手がかりを与えることができるかもしれません:)

小さなサンプル:

static void table_press(GtkWidget *widget, GdkEventButton *event)
{
    printf("table pressed");
} 

int main(int argc, char **argv)
{
    GtkWidget *window;
    GtkWidget* table;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW (window), "table click");

    table = gtk_table_new(2, 5, TRUE);

    gtk_container_add(GTK_CONTAINER (window), table);

    gtk_widget_add_events(table, GDK_BUTTON_PRESS_MASK);

    g_signal_connect(GTK_OBJECT (table), "button-press-event",
        G_CALLBACK (table_press), NULL);
    g_signal_connect_swapped(G_OBJECT(window), "destroy",
        G_CALLBACK(gtk_main_quit), G_OBJECT(window));

    gtk_widget_show_all(window);

    gtk_main();
    main_exit();
    return 0;
}
4

1 に答える 1

3

に関連付けられてGtkTableいないため、イベントを受信しません。これを使用すると、通常はイベントを受け入れないウィジェットでイベントを受け入れることができますGdkWindowGtkEventBoxこれはから派生してGtkBinいるので、興味深いコードは次のようになります。

table = gtk_table_new(2, 5, TRUE);
event_box = gtk_event_box_new();
gtk_container_add(GTK_CONTAINER (window), event_box);
gtk_container_add(GTK_CONTAINER (event_box), table);
g_signal_connect(GTK_OBJECT (event_box), "button-press-event",
    G_CALLBACK (table_press), NULL);
于 2013-03-14T23:11:01.240 に答える