gtk – 关闭窗口表单,带有C中的按钮

gtk – 关闭窗口表单,带有C中的按钮,第1张

概述我有一个带有菜单的主窗口,打开另一个窗口.此辅助窗口有一个关闭按钮.该按钮点击了连接的信号.我的问题是我不知道如何关闭/销毁该父窗口.我尝试过使用gtk_widget_destroy,但是因为窗口不是小部件而出现错误….我没有找到任何破坏父窗口的功能…. 有人能给我指路吗? 提前致谢. ———————————————– 好.我发布了一段代码.当我执行程序时,单击“打开窗口”按钮.打开一个新窗口,单 我有一个带有菜单的主窗口,打开另一个窗口.此辅助窗口有一个关闭按钮.该按钮点击了连接的信号.我的问题是我不知道如何关闭/销毁该父窗口.我尝试过使用gtk_Widget_destroy,但是因为窗口不是小部件而出现错误….我没有找到任何破坏父窗口的功能….

有人能给我指路吗?
提前致谢.

———————————————–

好.我发布了一段代码.当我执行程序时,单击“打开窗口”按钮.打开一个新窗口,单击“关闭”按钮.如果我单击“关闭”按钮,我在终端中得到下一个错误:(Windows:13801):Gtk-CRITICAL **:gtk_Widget_destroy:断言`GTK_IS_Widget(小部件)’失败

代码是:

#include <stdlib.h>#include <gtk/gtk.h>#include <gdk/gdkkeysyms.h>voID open_window(GtkWidget *Widget,gpointer window);voID close_window(GtkWidget *Widget,gpointer window);int main( int argc,char *argv[]){    GtkWidget *window;    GtkWidget *fixed;    GtkWidget *button;    gtk_init(&argc,&argv);    window = gtk_window_new(GTK_WINDOW_topLEVEL);    gtk_window_set_Title(GTK_WINDOW(window),"windows");    gtk_window_set_default_size(GTK_WINDOW(window),230,150);    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);    fixed = gtk_fixed_new();    gtk_container_add(GTK_CONTAINER(window),fixed);    button = gtk_button_new_with_label("Open window");    gtk_fixed_put(GTK_FIXED(fixed),button,50,50);    gtk_Widget_set_size_request(button,80,35);    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(open_window),G_OBJECT(window));    g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NulL);    gtk_Widget_show_all(window);    gtk_main();    return 0;}voID open_window(GtkWidget *Widget,gpointer window){    GtkBuilder *builder;    GtkWidget *seconDWindow = NulL;    builder = gtk_builder_new ();    gtk_builder_add_from_file (builder,"seconDWindow.glade",NulL);    seconDWindow = GTK_Widget (gtk_builder_get_object (builder,"seconDWindow"));    gtk_builder_connect_signals (builder,NulL);    g_object_unref (G_OBJECT (builder));    gtk_window_set_modal(GTK_WINDOW(seconDWindow),TRUE);    gtk_Widget_show_all(seconDWindow);}voID close_window(GtkWidget *Widget,gpointer window){    gtk_Widget_destroy(GTK_Widget(window));}

在文件“seconDWindow.glade”中定义了一个窗口,一个表和一个放在表格中间单元格中的按钮.此外,它还定义了名为“close_window”的“clicked”事件按钮的句柄.

如果有人想要执行它,请链接到glade文件:https://sites.google.com/site/marvalsiteimages/secondWindow.glade

我希望这可以帮助你理解我的问题.
Thansk.

————————————————-

基于响应的最终代码:

voID open_window(GtkWidget *Widget,gpointer window){    GtkBuilder *builder;    GtkWidget *seconDWindow = NulL;    GtkWidget *closebutton = NulL;    builder = gtk_builder_new ();    gtk_builder_add_from_file (builder,"seconDWindow"));    closebutton = GTK_Widget (gtk_builder_get_object (builder,"closeWindowbutton"));    g_signal_connect (G_OBJECT (closebutton),G_CALLBACK (close_window),G_OBJECT (seconDWindow)); // here is the magic: the callback will get the window to close    g_object_unref (G_OBJECT (builder));    gtk_window_set_modal(GTK_WINDOW(seconDWindow),TRUE);    gtk_Widget_show_all(seconDWindow);}
解决方法 您的问题是第二个窗口的按钮的“单击”信号是从glade文件连接的.但是信号处理程序需要一个指向窗口的指针来销毁它.这通过信号回调的“user_data”参数传递.

一种方法是将第二个窗口作为Glade中的user_data参数传递(看一下这个Glade tutorial),但是参数应该是一个指针,我不知道如何用glade做到这一点.编辑:只需在glade中单击与此信号关联的用户数据字段,d出窗口将允许您选择要传递给信号处理程序的对象.只需选择“seconDWindow”对象即可.

另一种方法是从glade文件中删除信号处理,并手动连接代码中的单击信号,将指针作为用户数据传递给第二个窗口:

voID open_window(GtkWidget *Widget,TRUE);    gtk_Widget_show_all(seconDWindow);}
总结

以上是内存溢出为你收集整理的gtk – 关闭窗口表单,带有C中的按钮全部内容,希望文章能够帮你解决gtk – 关闭窗口表单,带有C中的按钮所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1063444.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存