如何用GTK库c++管理windows导航



我正在使用GTK库为我的应用程序制作一个简单的GUI,但我在管理窗口导航方面遇到了一些问题。特别是,我无法从窗口返回到屏幕上显示的前一个窗口。我已经尝试了多种可能性,例如:gtk_window_set_focus,gtk_window_present,但它们不起作用。下面是代码:

void callback(GtkWidget *wid, gpointer ptr)
{
GtkWidget *win = static_cast<GtkWidget*>(ptr);
gtk_window_fullscreen(GTK_WINDOW(win));     
}
int main()
{
gtk_init(NULL,NULL);
GtkWidget *window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window1), "1th window");
gtk_window_fullscreen(GTK_WINDOW(window1));
GtkWidget *btn1 = gtk_button_new_with_label ("Go to 2th window");
gtk_container_add (GTK_CONTAINER (window1), btn1);
gtk_widget_show_all(window1);
GtkWidget *window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window2), "2th window");
GtkWidget *btn2 = gtk_button_new_with_label ("Go back to 1th window");
gtk_container_add (GTK_CONTAINER (window2), btn2);
g_signal_connect(window1,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
g_signal_connect(window2,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
g_signal_connect (btn1, "clicked", G_CALLBACK (callback),window2);
g_signal_connect (btn2, "clicked", G_CALLBACK (callback),window1);
gtk_widget_show_all(window2);
gtk_main();
}

问题是,当我按下btn2时,即使回调函数被调用,前一个窗口也不会成为活动窗口。

更改此处理程序(为了简单起见,删除全屏行):

void callback(GtkWidget *wid, gpointer ptr)
{
// This, by itself, does nothing (see next line):
GtkWindow *win = static_cast<GtkWindow*>(ptr);
// This changes the active window on screen:
gtk_window_present(win);
}

技巧是在处理程序中使用gtk_window_present(你的处理程序除了全屏显示之外什么都不做)。

最新更新