首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GTK3 (C语言)中切换窗口

如何在GTK3 (C语言)中切换窗口
EN

Stack Overflow用户
提问于 2017-01-25 17:17:12
回答 1查看 1.9K关注 0票数 1

我有一个应用程序,作为一个点,打开一个新的窗口,并工作良好。

然后在我做完这件事后,我需要切换回主窗口。

我知道我需要这个功能:

代码语言:javascript
复制
gtk_widget_hide();

但是我不知道如何隐藏主窗口,只打印第二个窗口,然后单击第二个窗口中的按钮返回第一个窗口。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
#include <stdio.h>
#include <gtk/gtk.h>

static void crete_new_wind (GtkWidget *widget);
gboolean destroy (GtkWidget *window);

int main (int argc, char *argv[]){
    GtkWidget *window, *button, *box;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "First Window");
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    gtk_widget_set_size_request (window, 300, 300);
    gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);

    button = gtk_button_new_with_label ("Go to Window B");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (crete_new_wind), (gpointer) window);

    box = gtk_box_new (TRUE, 1);
    gtk_box_pack_end (GTK_BOX (box), button, TRUE, TRUE, 1);
    gtk_container_add (GTK_CONTAINER (window), box);

    gtk_widget_show_all (window);
    gtk_main ();
    return 0;
}

void crete_new_wind (GtkWidget *widget){
    GtkWidget *window, *button, *box;

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "Second Window");
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    gtk_widget_set_size_request (window, 300, 300);
    gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);;
    g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), widget);

    button = gtk_button_new_with_label ("Go back to Window A");
    g_signal_connect (G_OBJECT (button), "destroy", G_CALLBACK (destroy), NULL);
    gtk_widget_hide(widget);

    box = gtk_box_new (TRUE, 1);
    gtk_box_pack_end (GTK_BOX (box), button, TRUE, TRUE, 1);
    gtk_container_add (GTK_CONTAINER (window), box);
    gtk_widget_show_all (window);
}

gboolean destroy (GtkWidget *widget){
    gtk_widget_destroy (widget);
    return TRUE;
}

如果我单击该按钮(转到窗口B),我将得到以下内容:

但是主窗口仍然在那里,对用户来说这不是我所需要的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-25 17:33:20

那是因为clicked回调想要两个参数

将原型和函数更改为

代码语言:javascript
复制
static void crete_new_wind(GtkButton *dummy, gpointer widget);

static void crete_new_wind(GtkButton *dummy, gpointer widget) {

以便在函数中使用第二个参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41857686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档