GTK+2.0之初始学习篇(二)—— g_signal_connect宏解释及HelloWorld

2023-05-16

       GTK+2.0中利用信号/回调函数机制来处理窗口外部传来的事件、消息或信号。

       以下实现的是单击窗口关闭按钮,窗口自动关闭。在程序中调用了gtk_main_quit()函数实现退出主循环。

#include<gtk/gtk.h>
void on_delete_event(); //函数声明
int main(int argc, char* argv[])
{
    GtkWidget *window;
    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    /*
     *这里要注意的是g_signal_connect宏.
    */
    g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(on_delete_event), NULL);
    gtk_window_set_title(GTK_WINDOW(window), "第二个练习窗口例子");
    gtk_window_set_default_size(GTK_WINDOW(window),500, 100);
    /*
     *设定窗口的位置在父窗口的中部
    */
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
    gtk_widget_show(window);
    gtk_main();
    return FALSE;
}
/*
 *实现退出主循环
*/
void on_delete_event(GtkWidget *widget, GdkEvent* event, gpointer data)
{
     gtk_main_quit(); 
}



      g_signal_connect宏是今天学习的目的之一。g_signal_connect宏有4个参数


gulong g_signal_connect( gpointer *object,
                         const gchar *name,
                         GCallback func,
                         gpointer func_data );


      它们分别是连接信号控件的指针(连接的对象)、信号名称、回调函数以及传递给回调函数的参数。而第三个回调函数一般为以下的形式

void callback_func( GtkWidget *widget,  gpointer callback_data );


        第一个参数是指向发出信号的控件指针,第二个参数是g_signal_connect宏的最后一个参数传进来的数据指针。


      接下来我们来学习HelloWorld的代码。在上面的代码里添加HelloWorld。

#include<gtk/gtk.h>
//函数声明
void on_delete_event();
void on_button_clicked();
//定义单击次数统计
gint data_count = 1;

int main(int argc, char* argv[])
{
    GtkWidget *window;
    GtkWidget *button;
    
    gtk_init(&argc, &argv);
    
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(on_delete_event), NULL);
    
    gtk_window_set_title(GTK_WINDOW(window), "Hello World Test");
    gtk_window_set_default_size(GTK_WINDOW(window),500, 100);
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);

    gtk_container_set_border_width(GTK_CONTAINER(window),50);
    button = gtk_button_new_with_label("按下按钮将会显示一行信息:");
    //响应click事件
    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)data_count);
    gtk_container_add(GTK_CONTAINER(window),button);

    gtk_widget_show(button);
    gtk_widget_show(window);
    gtk_main();
    return FALSE;
}

void on_delete_event(GtkWidget *widget, GdkEvent* event, gpointer data)
{
     gtk_main_quit(); 
}
/*
 *实现单击显示Hello World 结果以及显示单击的次数data_count
*/
void on_button_clicked(GtkWidget *button, gpointer userdata)
{
    g_print("Hello,The test for 'Hello World'!");
    g_print("%d\n", data_count);
    data_count = data_count + 1;
}


      执行  $gcc -o gtksec ./gtk_sec.c `pkg-config --cflags --libs gtk+-2.0`  

      将会看到程序结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GTK+2.0之初始学习篇(二)—— g_signal_connect宏解释及HelloWorld 的相关文章

  • SYD8821 IIC模块使用说明

    SYD8821是具有全球领先低功耗 RX 2 4mA 64 94 5dBm灵敏度 xff0c TX 4 3mA 64 0dBm输出功率 的蓝牙低功耗SOC芯片 xff0c 在极低电流下实现了优异的射频性能 xff0c 搭配176kB SRA
  • Python下载文件时出现乱码的解决方法之一:Content-Encoding: gzip

    之前写过一个简单的爬虫程序 xff0c 这次想试着再写一个下载固定文件的爬虫程序 写完之后发现下载的文件 xff0c 有些是可以正常打开的 xff0c 而有些是提示了编码错误 xff0c 用wireshark抓包 xff0c 过滤出http
  • Python爬虫判断url链接的是下载文件还是html文件

    最近在写一个网络爬虫的代码 xff0c 提供命令行来下载文件或者是打印根域名下指定节点及深度的子节点 用的是urllib2库 xff0c 算是比较简单 xff0c 但是功能并没有很强大 说重点吧 xff0c 在实际爬网页的过程中 xff0c
  • recvmsg和sendmsg函数

    在unp第14章讲了这两个函数 xff0c 但是只是讲了两个数据结构及参数而已 xff0c 所以自己想根据介绍来重构udp回射的客户端程序 但是sendmsg和recvmsg都遇到了问题 xff0c 并且纠结了很久 xff0c 所以在此记录
  • STL中map的[]运算导致程序挂掉的问题

    在项目的开发中 xff0c 使用 设置map变量时 xff0c 出现了Segment Fault的问题 xff0c 使用GDB bt命令得到调用栈 xff08 中间部分被我去掉了 xff09 如下 xff1a 0 0x00000000008
  • 结构体的vector resize()与初始化

    转自 xff1a https www cnblogs com kongse qi p 6798873 html 序 xff1a 我们在使用vector的时候可以自定义里面的数据类型 例如这样 xff1a struct Edge int fr
  • new(p) T1(value) 的操作

    最近开始看 STL源码剖析 xff0c 看到空间配置器的时候 xff0c 发现这么一段代码 xff1a template lt class T1 class T2 gt inline void construct T1 p const T2
  • Protobuf 编码及序列化的记录

    工作中用到了protobuf xff0c 然后之前在面试的时候面试官就问了一个问题 xff0c 如果将int32类型的字段的值设置为0 xff0c 那还会将该值进行序列化吗 xff1f 当时是懵了的 xff0c 因为自己还没有研究这部分 当
  • STM32驱动lcd1602,并口8位 6800时序

    STM32驱动lcd1602 xff0c 并口8位 6800时序 一 LCD1602 xff08 3 3V硬件版本 xff09 简介 1 1 引脚 引脚 xff0c lcd1602采用标准接口 xff0c 6800时序8位并行数据传输 第
  • CAN总线详解

    1 简介 CAN是控制器局域网络 Controller Area Network CAN 的简称 xff0c 是一种能够实现分布式实时控制的串行通信网络 优点 xff1a 传输速度最高到1Mbps xff0c 通信距离最远到10km xff
  • VS C#工程三【使用配置文件保存应用程序里的配置数据】[Resources找不到][打印log到VS窗口]【安全从工程删除图片】[发布exe并附带动态链接库dll]

    SYD8801是一款低功耗高性能蓝牙低功耗SOC xff0c 集成了高性能2 4GHz射频收发机 32位ARM Cortex M0处理器 128kB Flash存储器 以及丰富的数字接口 SYD8801片上集成了Balun无需阻抗匹配网络
  • 对Socket CAN的理解(2)——【Socket的原理及使用】

    转载请注明出处 xff1a http blog csdn net Righthek 谢谢 xff01 为了能够对Socket CAN的深入理解 xff0c 我们需要了解Socket的机制 Socket的中文翻译为 插座 xff0c 在计算机
  • 对Socket CAN的理解(3)——【Socket CAN发送数据流程】

    转载请注明出处 xff1a http blog csdn net Righthek 谢谢 xff01 对于本文 xff0c 我们将从用户层使用Socket CAN进行数据发送时 xff0c 数据从用户空间到底层驱动的整个通信流程 xff0c
  • 对Socket CAN的理解(4)——【Socket CAN接收数据流程】

    转载请注明出处 xff1a http blog csdn net Righthek 谢谢 xff01 现在我们来分析一下CAN总线的接收数据流程 xff0c 对于网络设备 xff0c 数据接收大体上采用中断 43 NAPI机制进行数据的接收
  • docker创建ubuntu16.04容器(上)

    容器三大基本概念 xff0c docker整个生命周期就是这三个概念 镜像 image Docker镜像就是一个只读的模板 镜像可以用来创建Docker容器 Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像 xff0c 用户甚
  • SPDIF接口介绍

    一 S PDIF接口规范详解 S PDIF是sony和philips在80年代为一般家用器材所定制出来的一种数字讯号传输接口 xff0c 基本上是以AES EBU 也称AES3 专业用数字接口为参考然后做了一些小变动而成的家用版本 可以使用
  • 【音频】I2S协议详解

    一 I2S介绍 I2S Inter IC Sound 总线 又称 集成电路内置音频总线 xff0c 是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准 xff0c 该总线专门用于音频设备之间的数据传输 xff0c 广泛应用于各
  • linux 音频驱动实验

    文章目录 一 音频接口简介 1 为何需要音频编解码芯片2 WM8960简介3 I2S总线接口4 6u SAI简介 二 硬件原理图三 音频驱动使能 1 修改设备树 1 Wm8906 i2c接口设备树2 6u SAI接口设备树3 I MX6UL
  • 【UBI文件系统制作】-(1)UBI文件系统简介

    1 引言 在Linux 2 6 27以前 xff0c 谈到Flash文件系统 xff0c 大家很多时候多会想到CRAMFS JFFS2 YAFFS2等文件系统 它们也都是基于文件系统 43 MTD 43 Flash设备的架构 Linux 2
  • 分享篇 - Android 如何使用其他 APP 的 App ID 做微信分享

    1 需求背景 一些 APP 分享到微信 xff0c 朋友圈经常被封 如果在微信分享时 xff0c 我们将微信分享的 App ID 改成其他应用的 App ID xff0c 就可以使用其他 App 的名义进行分享 xff0c 而且分享出去的内

随机推荐

  • 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int---->解决方法

    写了一个对应让其出的错误 xff08 其实也挺不容易的喔 xff09 错误如下 xff1a 1 gt d work win32project testeachotherclude testeachotherclude test2 h 9 e
  • 58同城Android端-最小插件化框架实战和原理分析

    目录 背景插件化需要了解的知识 2 1 类加载过程和类加载器 2 2 ClassLoader 的 findClass findLibrary findResource 2 3 DexClassLoader 的 oat 配置 2 4 Load
  • MetaX组件化框架

    目录 MetaX 框架介绍MetaX 是如何设计的MetaX 运行效果 1 MetaX 框架介绍 MetaX 是 58无线 Android 团队开发的一套增强版的组件化框架 xff0c 它制定了一系列的标准和规范 xff0c 来解决现有组件
  • 58同城首页腰部动态化技术选型(布局动态化)

    1 行业情况 1 1 基本概念介绍 1 1 1 Web混合 Web 前端和客户端的混合开发 使用 WebView 进行页面渲染 逻辑执行 xff1b 依赖客户端的能力需要通过 JSBridge 通信桥 的方式进行调用 xff0c 比如调用客
  • Java篇 - 四种引用(Reference)实战

    Java的垃圾回收 GC 是虚拟机自动管理的 xff0c 前面我有篇文章专门讲GC xff1a JVM篇 GC给你整明白 Java内存管理分为内存分配和内存回收 xff0c 都不需要程序员负责 xff0c 垃圾回收的机制主要是看对象是否有引
  • 网络篇 - https协议中的数据是否需要二次加密

    随着互联网整体的发展 xff0c https 也被越来越多的应用 甚至苹果去年还曾经放言要强制所有的 app 都使用 https xff0c 可见在如今的互联网它的重要性 前面的文章说了 OSI 七层模型 xff0c https 可以保证数
  • 加解密篇 - 对称加密算法 (DES、3DES、AES、RC)

    这篇文章来讲讲对称加密 xff0c 对称加密在开发中用的很多 xff0c 如 AES xff0c DES xff0c 3DES xff0c RC 目录 介绍优点和缺点DES算法3DES算法AES算法RC算法 1 介绍 1 1 概念 采用单钥
  • 加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)

    最近的文章中多次出现了非对称加密 xff0c 今天就来分析一下非对称加密的算法 目录 xff1a 简介RSA算法DSA算法ECC算法DH算法 1 简介 1 1 概念 非对称加密需要两个密钥 xff1a 公钥 publickey 和私钥 pr
  • 跨平台技术篇 - 使用 Flutter 与原生技术混合开发示例

    目前主流的混合开发方案有两种集成方式 xff1a 源码集成 xff1a 也就是谷歌官方提供的方案 https github com flutter flutter wiki Add Flutter to existing apps 产物集成
  • 音视频篇 - Android 音视频涉及到的技术

    前言 现在市面上的图像 xff0c 音视频软件越来越多 xff0c 最近两年也是直播 xff0c 短视频的红利期 而图像 音视频一直是互联网视觉的入口 xff0c 掌握并熟练运用音视频 图像技术已经是当前互联网时代不可或缺的技能 xff0c
  • sockaddr_in的一个小理解

    之前一直认为是sockaddr 设计时有缺陷 xff0c 在编写网络通信时 xff0c 都使用sockaddr in xff0c 因为它将sockaddr 中的 char sa data 14 拆分为了 unsigned short sin
  • Linux虚拟机下WWW(HTTP)服务器的搭建与使用(详细)

    1 简介 1 1 关于www服务器 WWW服务器是被动程序 xff0c 只有接收到互联网中其他计算机发出的请求后才会响应 xff0c 然后WWW服务器才会使用HTTP或者HTTPS将指导文件传输到客户机的浏览器上 1 2 关于HTTP协议
  • 非抢占式优先级调度算法

    Priority scheduling is a type of scheduling algorithm used by the operating system to schedule the processes for executi
  • Eclipse中使用jstl标签库

    在MyEclipse中使用jstl标签只需导读jstl jar就能使用 xff0c 但是在Eclipse中还需要一点小套路 步骤 xff1a 一 导入jstl jar 二 导入导入standard jar 三 web xml加上如下配置 l
  • hibernate HQL 投影查询 + 多表关联

    64 Test public void testQueryProjection Session session 61 HibernateUtils openSession session beginTransaction 操作 hql 默认
  • NetEQ 算法

    NetEQ 算法中集成了自适应抖动控制算法以及语音包丢失隐藏算法 这项技术使其能够快速且高解析度地适应不断变化的网络环境 xff0c 确保音质优美且缓冲延迟最小 研究的重点是 NetEQ 模块 xff0c 其中所涉及的处理过程包括抖动消除
  • 数组的形参与实参,通过引用传递数组

    数组形参 xff1a void printValues int void printValues int void printValues int 10 以上三种是等价的 通常 xff0c 将数组形参直接定义为指针要比使用语法定义更好 第三
  • java 简单员工管理系统

    package cn test import java io import java util class Emp 64 Override public String toString return 34 Emp empNo 61 34 4
  • 关闭虚拟机vmware自动挂起

    1 xff0c 桌面右键 属性 xff0c 里的屏幕保护程序 xff0c 选 无 2 xff0c 控制面板的电源选项 xff0c 方案为 一直开着 xff0c 具体选项选 从不关机 3 xff0c 在Windows 2003 Server点
  • GTK+2.0之初始学习篇(二)—— g_signal_connect宏解释及HelloWorld

    GTK 43 2 0中利用信号 回调函数机制来处理窗口外部传来的事件 消息或信号 以下实现的是单击窗口关闭按钮 xff0c 窗口自动关闭 在程序中调用了gtk main quit 函数实现退出主循环 include lt gtk gtk h