没事儿找事儿————gtk学习(完善窗口的功能)

         上一篇中的示例运行时,点击关闭按钮,窗口会自动关闭,但终端中的提示符却不见了。其实完全可以关闭终端窗口,在开启一个。不过最好的办法是按下Ctrl+C组合键,这样提示符就出现了。为什么会出现这种情况呢?上面示例中只调用了主事件循环gtk_main,而未对来自用户的信号做任何处理,所以即使窗口关闭了,循环仍在循环,程序并未真正的退出。按下Ctrl+C组合键,系统向此程序发出了中断信号,程序才真正的终止执行。

对程序稍加修改:

#include<gtk/gtk.h>
int main(int argc, char *argv[])
{
        GtkWidget *window;
        gtk_init (&argc, &argv);
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title (GTK_WINDOW (window), "Hello World");
        gtk_window_set_default_size(GTK_WINDOW(window),400,300);
        gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
        g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
        gtk_widget_show (window);
        gtk_main ();
        return 0;
}


编译运行点击关闭按钮就可以完全退出程序了。

        gtk采用了一种信号和回调函数机制来处理窗口外部传来的事件、消息或信号。即先为窗口或控件定义一系列信号,在编程中引用信号名称为窗体或控件添加回调函数,
当信号发生时,程序自动调用为信号连接的回调函数。
        gtk退出程序时要调用gtk_main_quit(),它的功能是退出主循环,也就是结束程序的运行。一般情况下当窗口关闭时程序就退出了,但并不主动处理退出程序,这就需要为delete_event信号连接回调函数。

为窗口或者控件加回调函数有两种方式:

          一种是直接调用已有函数比如gtk_main_quit,在窗口创建完成后直接引用g_signal_connect宏。如:g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
         另一种是先定义好回调函数。在窗口或控件创建完成后再引用g_signal_connect宏。
 如:void on_delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
    {
     gtk_main_quit();
    }
    主函数中这样引用g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(on_delete_event),NULL);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值