在网页上搜索答案并不能解决我的问题:
如果我点击一个单元格,我想要发送一个事件。
由于没有点击事件,接受GtkButton,我想实现 GDK_BUTTON_PRESS_MASK 和 GDK_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;
}
答案 0 :(得分:2)
由于GtkTable
没有与GdkWindow
关联,因此您不会收到任何事件。您可以使用GtkEventBox
来接受通常不接受事件的小部件上的事件。这是从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);