繁体   English   中英

如何在GTK +中隐藏.ui文件并显示另一个.ui文件

[英]How to hide a .ui file and show another .ui file in GTK+

我在GTK + 3的窗口上有一个按钮。单击该按钮时,应打开另一个ui文件中的一个窗口,并应删除当前窗口的ui(隐藏)。 但是我不知道该怎么做,我真的是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()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*因此您可以随意传递给函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM