GTK入门教程

article/2025/9/11 17:22:30

GTK入门教程

1.GTK简介

  GTK(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。当然,GTK也是支持跨平台的,支持Unix类的系统、Windows,甚至手机平台。
  GTK是使用C语言写的,所以其原生API都是面向C的,同时GTK的一大特点是,在C语言层面实现了面向对象的特性。GTK是完全免费的,而且基于LGPL协议,这可以保证私有软件通过链接使用GTK可以不把软件源代码开放,对商业应用较友好,这跟GPL协议是不一样的。也正是LGPL协议,使得早些年Gnome(基于GTK编写)风头胜过KDE(基于QT编写)。
  GTK+ 从目前的发展趋势来看,越来越成为 Linux 和 GNOME 的 native toolkit,对于跨平台的考虑越来越少了。GNOME 目前仍是 Linux 平台最主流的桌面系统,而像 Pantheon、Cinnamon 等桌面也只是 GNOME 换了个壳,底层也是 GNOME 技术栈,所以 GTK+ 在这方面仍会大有发展。
在这里插入图片描述

2.GTK和GTK+

  上面只是说了gtk,但我要学习的是gtk+。它们之间有什么关系呢?gtk+的作者之一PerterMattis说他原来开发的gtk包含了三套函数库, libglib、libgdk,和 libgtk,这些库没有采用面向对象机制,因而无法实现构件的复用,而且消息机制是使用标准的回调机制实现的,而非现在的gtk+所提供的信号机制。“+”是用来区分原始版本和新版本的。gtk+依然是完全使用C语言开发的,但在设计上灵活运用了面向对象设计(OOD)思想(谁说只有C++、java、C#这样的语言可以OOD 呢)。

3.Linux下第一个GTK程序

3.1 查看系统是否安装了GTK

  pkg-config命令可查看安装库的详细信息。

$ pkg-config  --list-all | grep gtk
gtk-sharp-3.0                  Gtk - Gtk
gtk+-unix-print-2.0            GTK+ - GTK+ Unix print support
gtk+-x11-2.0                   GTK+ - GTK+ Graphical UI Library (x11 target)
gtk+-2.0                       GTK+ - GTK+ Graphical UI Library (x11 target)

3.2 第一个GTK程序示例

#include <gtk/gtk.h>
int main(int argc,char *argv[])
{/* GtkWidget 是构件的存储类型 */GtkWidget *window;/*每一个GTK程序都要调用*/gtk_init(&argc, &argv);/*创建一个新的窗口*/window= gtk_window_new(GTK_WINDOW_TOPLEVEL);/*设置窗口标题*/gtk_window_set_title(GTK_WINDOW(window),"GTK Hello");/*设置窗口大小*/gtk_widget_set_usize(window, 200, 200);/*显示窗口*/gtk_widget_show_all (window); /*所有的 GTK 程序必须有一个 gtk_main() 函数。程序运行停在这里等待事件 (如键盘事件或鼠标事件) 的发生。 */gtk_main();return 0;
}
  • 程序编译:
gcc main.c  `pkg-config --cflags --libs gtk+-2.0`

在这里插入图片描述

  • 编译参数:

  pkg-config --cflags gtk±2.0 列出include 目录,pkg-config --libs gtk±2.0列出编译连接库,也可以合在一起,像这样:pkg-config --cflags --libs gtk±2.0。
  这里使用了“命令替换”。 命令替换(commandsubstitution)使得可以捕获一个命令的输出而在另一个命令中替换它。这个单引号不是回车键左边的那个,而是 ESC 键下面的那个。

  • 连接时常用的库:
• GTK 库(-lgtk),构件库,基于GDK。
• GDK 库(-lgdk),Xlib库的封装(wrapper)。
• gdk-pixbuf 库(-lgdk_pixbuf),图像处理库。
• Pango 库(-lpango),处理国际化文本。
• gobject 库(-lgobject),包含作为 GTK 基础的类型系统。
• gmodule 库(-lgmodule),动态运行库。
• GLib 库(-lglib),包含各种函数; GTK是基于 GLib 的,因此你总需要这个库。
• Xlib 库(-lX11),GDK 要使用。
• Xext 库(-lXext),包含共享内存位图和其它 X 扩展。
• math 库(-lm),数学库,这个被 GTK 因各种目的而使用。

3.3相关函数接口介绍

  1. gtk初始化gtk_init

void gtk_init (int *argc, char ***argv)
函数功能: gtk初始化,会在每个gtk程序中调用。该函数设定了默认的视频(visual)和颜色映射模式(color map)。

  1. gkt主处理循环gtk_main

void gtk_main (void)
函数功能: 当程序运行到这里,GTK 会“睡着”等待 X 事件 (如按钮或键盘按下)、超时(timeouts)或文件 IO 通知发生。但是在调用gtk_main_quit函数以前,对gtk_main函数的调用并不返回,即使你关闭了窗口,程序仍然在运行(上述示例演示了此效果),在这种情况下,我们在调用gtk_main函数之前应该先建立回呼函数,而且设置GTK+使得在出现某些信号时转而执行应用软件,由应用软件接着进行处理。

  • 参考资料:
      1. GTK2.0+入门教程
      2. GTK官网:https://www.gtk.org/

http://chatgpt.dhexx.cn/article/WaC83hK3.shtml

相关文章

gtk学习总结:GTK从入门到放弃,三天包教包会

今天花了一些时间复习之前学习过的gtk&#xff0c;感觉东西光学不用忘得好快啊&#xff0c;在这做个之前学过的内容的备份&#xff0c;希望对大家有用&#xff0c;也希望大家不要从入门到放弃。文中有些代码例子可能来自《GTK从入门到精通》吧&#xff0c;我不记得了&#xff0…

gcc下载地址

网上看到有提供的http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/&#xff0c;可以打开&#xff0c;但是下载太慢了 这里记录一个下载很快的地址https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/&#xff0c;为清华大学的开源镜像网站 想要找其他的开源软件&#xff0c;…

如何安装GCC

现在的CentOs8上没有自带的gcc编译器因此需要下载&#xff08;注意&#xff1a;这里的下载是指在虚拟机中下载&#xff0c;不是指在电脑上下载&#xff09; 若运行gcc时出现appstream 下载元数据失败则表明没有安装gcc。 1 首先需要获得root权限**** 在终端模式下输入su&…

arm-Linux-gcc交叉编译器和gcc编译器的下载地址

1.arm-none-linux-gnueabi-gcc下载 http://www.veryarm.com/arm-none-linux-gnueabi-gcc arm-none-Linux-gnueabi-gcc是 Codesourcery 公司&#xff08;目前已经被Mentor收购&#xff09;基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码&#xff0c;包…

Windows中安装GCC教程

GCC的安装教程 GCC简介 GCC编译器通常在Linux系统下使用&#xff0c;一般来说大部分发行的系统会默认安装&#xff0c;GCC编译器使用gcc指令在终端进行shell操作。 对于新接触Linux的朋友来说&#xff0c;简单的在Windows中练习过渡一下应该就足够了。&#xff08;我就是因为…

windows下安装gcc编译器(c/c++/fortran)

首先下载MinGW - Minimalist GNU for Windows 下载结束后双击&#xff0c;点击下一步即可&#xff0c; 然后勾选要安装的组件&#xff1a; 点击应用&#xff1a; 开始安装&#xff08;这一步要经过漫长的下载过程&#xff0c;请耐心等待&#xff09;&#xff1a; 修改环境变量…

软件安装 gcc编译器

rpm命令及各参数使用。针对所有已安装的软件建立一个本地软件数据库&#xff0c;作为后续软件升级和卸载的依据本地软件数据库保存在目录/var/lib/rpm中 yum命令及各参数应用可以把本地计算机作为本地YUM源&#xff0c;也可以配置一个网络YUM源 YUM源&#xff1a;包含整理好的…

在线c++编译器(gcc)

这几年c标准委员会活跃起来&#xff0c;c11、14标准相续推出。对于想尝鲜又怕麻烦&#xff08;visual studio 更新慢&#xff0c;对标准的支持力度也不够。对于使用gcc的&#xff0c;替换系统的gcc版本或者安装个mingw也挺费事&#xff09;的人来说&#xff0c;可以优先考虑在线…

GCC编译器介绍

GCC是一套由GNU开发的编程语言编译器&#xff0c;在Linux系统下可以用它调用其他不同的工具进行预处理、编译、汇编、链接这样的工作&#xff0c;其执行效率比一般编译器高20%~30%。由于它是GNU项目之一&#xff0c;是开源的软件&#xff0c;我们可以直接从网上免费地下载安装它…

Window10-MinGW下载安装gcc,g++编译器

文章目录 完成流程步骤&#xff1a;出现的问题&#xff1a; 完成流程步骤&#xff1a; 1.MinGW下载 MinGW官网 mingw-get-setup.exe下载地址 2.MinGW安装 打开下载好的mingw-get-setup.exe &#xff0c;这里选择安装目录为F:\MinGW。 3.下载安装gcc/g ​ 通过MinGW Insta…

gcc官网以及各个版本下载地址

gcc的官网&#xff1a; http://gcc.gnu.org/ gcc镜像站点&#xff1a; https://gcc.gnu.org/mirrors.html 例如点 Japan的链接 到japan站点下载

GCC编译器 MinGW的下载安装使用教程

哎 总所周知 gcc可以用来编译C 和C。在linux广泛应用&#xff0c;那么window怎么使用gcc呢。 就要用到gcc的window工具----MInGW&#xff0c;安装好之后&#xff0c;直接可以在windows的dos界面编译。 下面讲解安装使用过程。 1.官网下载 MinGW - Minimalist GNU for Windows d…

APK反编译工具及方法

文章目录 一、下载工具apktooldex2jarjd-gui 二、APK反编译方法方法一&#xff1a;Apktool方法二&#xff1a;dex2jar jd-gui 三、APK文件的基本结构 一、下载工具 apktool apktool&#xff1a;资源文件获取&#xff0c;可以提取出图片文件和布局文件进行使用查看。 点击下载…

IDEA反编译Jar包

一.安装Java Bytecode Decomplier插件 (1) File–>Settings–>Plugins &#xff0c;搜索 Java Bytecode Decomplier 插件 (2) 查看安装插件的路径 File->Import Setting 注意&#xff1a;如果你的插件里面搜不到 Java Bytecode Decomplier&#xff0c;但是能搜到…

反编译jar包

问题描述&#xff1a; 前提说明&#xff1a;反编译别人的程序&#xff0c;是不推荐的&#xff0c;毕竟不太好&#xff0c;有可能涉及保密。 有时是没有办法而为之&#xff0c;原程序的开发工程师离职了&#xff0c;新的接口人业务不了解&#xff0c;但是也没有办法提供源码&…

反编译技术完全解析

1.前言 作为一个Android 程序猿,如果没有反编译过别人的apk&#xff0c;那有可能你是个假的程序猿~我们反编译别人apk可能是想看看别人优美的界面是怎么写的&#xff0c;或者是去获取别人的资源文件&#xff0c;又或者是看看某个功能是怎么实现的。记得在大学里&#xff0c;参…

idea反编译

1、问题描述 只有jar包&#xff0c;反编译下&#xff0c;看几个配置&#xff1b; 2、问题说明 用的idea里面的插件&#xff0c;java Decoplier&#xff0c;可以反编译jar包&#xff0c;效果挺好的&#xff0c;反编译出来的.java没乱码&#xff0c;可以直接看&#xff1b; 2…

超详细!apk安装包快速反编译,多种反编译及失败的解决方案(包含classes.dex的反编译,新增加快速反编译)

如要转载&#xff0c;请贴出原地址&#xff1a;https://blog.csdn.net/Nobody_else_/article/details/83996441 众所周知&#xff0c;我们开发所用的手机App安装包都是apk文件&#xff0c;Android应用开发完成之后&#xff0c;我们最终都会将应用打包成一个apk文件供用户安装&a…

反编译与反汇编

反编译做的就是编译的相反动作。举例来说&#xff0c;例如一个程序用C语言来写&#xff0c;写完之后要编译成CPU可以识别和运行的机器代码&#xff0c;也就是生成EXE程序。而反编译是反过来&#xff0c;把EXE反编译成编程源代码&#xff0c;也就是C程序&#xff0c;不过一般反编…

VS的反编译

痛点: ● 在使用系统库或者第三方库遇到问题&#xff0c;感觉自己写的没问题&#xff0c;怀疑源码有BUG&#xff0c;非要钻牛角尖 ● 求知欲旺盛&#xff0c;很想知道别人的代码怎么实现的 ● 反编译工具安装难&#xff0c;源码定位难&#xff08;主要是懒&#xff09; 其实宇…