如何在 GTK+ 中隐藏一个 .ui 文件并显示另一个 .ui 文件
How to hide a .ui file and show another .ui file in GTK+
我在 GTK+ 3 上的 window 上有一个按钮。单击该按钮时,应打开来自另一个 ui 文件的 window,当前 window的ui应该删除(隐藏)。但我不知道该怎么做 so.I 我对 linux 上的 Gtk+ 编程真的很陌生。
这是我的 .c 文件:
#include <gtk/gtk.h>
static void
buttonClicked(GtkWidget *widget,
gpointer data)
{
//here I need to open another window and close the current one
}
int main (int argc, char *argv[])
{
GtkBuilder *builder;
GObject *window;
GObject *button;
GError *error = NULL;
gtk_init (&argc, &argv);
builder = gtk_builder_new();
if(gtk_builder_add_from_file(builder, "main-window.ui", &error) == 0)
{
g_printerr ("Error loading file: %s\n", error->message);
g_clear_error (&error);
return 1;
}
window = gtk_builder_get_object (builder, "window");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
button = gtk_builder_get_object (builder, "buttonOpen");
g_signal_connect (button, "clicked", G_CALLBACK (buttonClicked), NULL);
gtk_main ();
return 0;
}
使用gtk_widget_show_all () and gtk_widget_hide ().
#include <gtk/gtk.h>
static void
buttonClicked(GtkWidget *widget, GObject* window)
{
GtkBuilder *builder;
GObject *window2;
GError *error = NULL;
builder = gtk_builder_new();
if(gtk_builder_add_from_file(builder, "second-window.ui", &error) == 0)
{
g_printerr ("Error loading file: %s\n", error->message);
g_clear_error (&error);
return;
}
window2 = gtk_builder_get_object (builder, "window");
gtk_widget_show_all(GTK_WIDGET(window2));
gtk_widget_hide(GTK_WIDGET(window));
}
int main (int argc, char *argv[])
{
GtkBuilder *builder;
GObject *window;
GObject *button;
GError *error = NULL;
gtk_init (&argc, &argv);
builder = gtk_builder_new();
if(gtk_builder_add_from_file(builder, "main-window.ui", &error) == 0)
{
g_printerr ("Error loading file: %s\n", error->message);
g_clear_error (&error);
return 1;
}
window = gtk_builder_get_object (builder, "window");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
button = gtk_builder_get_object (builder, "buttonOpen");
g_signal_connect (button, "clicked", G_CALLBACK (buttonClicked), window);
//some widgets don't draw if their parent window was not "show alled"
gtk_widget_show_all(GTK_WIDGET(window));
gtk_main ();
return 0;
}
请注意,gpointer 实际上是一个 void*
,因此您可以将任何您喜欢的传递给您的函数。
我在 GTK+ 3 上的 window 上有一个按钮。单击该按钮时,应打开来自另一个 ui 文件的 window,当前 window的ui应该删除(隐藏)。但我不知道该怎么做 so.I 我对 linux 上的 Gtk+ 编程真的很陌生。 这是我的 .c 文件:
#include <gtk/gtk.h>
static void
buttonClicked(GtkWidget *widget,
gpointer data)
{
//here I need to open another window and close the current one
}
int main (int argc, char *argv[])
{
GtkBuilder *builder;
GObject *window;
GObject *button;
GError *error = NULL;
gtk_init (&argc, &argv);
builder = gtk_builder_new();
if(gtk_builder_add_from_file(builder, "main-window.ui", &error) == 0)
{
g_printerr ("Error loading file: %s\n", error->message);
g_clear_error (&error);
return 1;
}
window = gtk_builder_get_object (builder, "window");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
button = gtk_builder_get_object (builder, "buttonOpen");
g_signal_connect (button, "clicked", G_CALLBACK (buttonClicked), NULL);
gtk_main ();
return 0;
}
使用gtk_widget_show_all () and gtk_widget_hide ().
#include <gtk/gtk.h>
static void
buttonClicked(GtkWidget *widget, GObject* window)
{
GtkBuilder *builder;
GObject *window2;
GError *error = NULL;
builder = gtk_builder_new();
if(gtk_builder_add_from_file(builder, "second-window.ui", &error) == 0)
{
g_printerr ("Error loading file: %s\n", error->message);
g_clear_error (&error);
return;
}
window2 = gtk_builder_get_object (builder, "window");
gtk_widget_show_all(GTK_WIDGET(window2));
gtk_widget_hide(GTK_WIDGET(window));
}
int main (int argc, char *argv[])
{
GtkBuilder *builder;
GObject *window;
GObject *button;
GError *error = NULL;
gtk_init (&argc, &argv);
builder = gtk_builder_new();
if(gtk_builder_add_from_file(builder, "main-window.ui", &error) == 0)
{
g_printerr ("Error loading file: %s\n", error->message);
g_clear_error (&error);
return 1;
}
window = gtk_builder_get_object (builder, "window");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
button = gtk_builder_get_object (builder, "buttonOpen");
g_signal_connect (button, "clicked", G_CALLBACK (buttonClicked), window);
//some widgets don't draw if their parent window was not "show alled"
gtk_widget_show_all(GTK_WIDGET(window));
gtk_main ();
return 0;
}
请注意,gpointer 实际上是一个 void*
,因此您可以将任何您喜欢的传递给您的函数。