#include <gtk/gtk.h>
gboolean user_function (GtkWidget *widget, GdkEvent *event,gpointer user_data);
static GtkWidget *createWindow(void)
{
GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
gtk_window_set_title(GTK_WINDOW(window), "GTK");
gtk_container_set_border_width(GTK_CONTAINER(window), 50);
// 这里delete-event信号的优先级高于destroy
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(window, "delete-event", G_CALLBACK(user_function), NULL);
return window;
}
gboolean user_function (GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
(void)widget;
(void)event;
(void)user_data;
g_print("Delete-Event was catched\n");
// 若返回值为TRUE,则不会发出destroy信号,导致窗口不会关闭
// 若返回FALSE,则将继续传播事件,触发destroy信号,从而关闭窗口
return TRUE;
}
int main(void)
{
GtkWidget *window;
GtkWidget *tgl_button;
gtk_init(NULL, NULL);
window = createWindow();
tgl_button = gtk_toggle_button_new();
g_signal_connect(tgl_button, "clicked", G_CALLBACK(gtk_main_quit), NULL);
gtk_container_add(GTK_CONTAINER(window), tgl_button);
gtk_widget_show_all(window);
gtk_main();
}
记录g_signal_connect的一些细节
最新推荐文章于 2022-10-17 19:05:11 发布