Ubuntu 下的哈囉!GTK+!
由於GTK基本上主要以C語言來撰寫,您必須有C編譯器,Ubuntu預設安裝好後就有gcc了,不過缺少必要的Header file,您可以在文字模式下,安裝build-essential套件,例如:
安裝完成後,可以寫個基本的C語言程式:
- hello.c
編譯並執行看看:
$ gcc -o hello hello.c $./hello Hello! World! 哈囉!C語言! |
再來安裝GTK開發套件libgtk2.0-dev:
安裝完成後,可以使用pkg-config查看一下GTK的相關編譯環境資訊:
pkg-config會讀取GTK附帶的.pc檔來取得相關編譯資訊,--cflags會列出include目錄,--libs列出所連結的函式庫及其所在目錄,以我的電腦為例:
$ pkg-config --cflags --libs gtk+-2.0 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 |
可以分開執行比較清楚,例如:
$ pkg-config --cflags gtk+-2.0 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1 $ pkg-config --libs gtk+-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 |
所連結的函式庫包括了(擷取翻譯自Compiling Hello World):
- GTK(-lgtk):基於 GDK 的 widget 函式庫。
- GDK(-lgdk):Xlib 包裏(Wrapper)。.
- gdk-pixbuf(-lgdk_pixbuf):影像處理函式庫。
- Pango(-lpango):國際化文字。
- gobject(-lgobject):GTK 用以為基礎的型態系統。
- gmodule(-lgmodule):用來載入執行時期的擴充。
- GLib(-lglib):包括各種函式,GTK 基於 GLib,所以您會需要這個函式庫。
- Xlib(-lX11):被 GDK 所使用。
- Xext(-lXext):包括共享記憶體 pixmaps(shared memory pixmaps)與其它 X 擴充。
- math(-lm):因各種目的而被 GTK 所使用的數學函式庫。
不可免俗的,從最簡單的基本視窗產生開始介紹,視窗標題就叫作「哈囉!GTK+!」好了,請使用任一編輯器來編輯一個helloGtk.c的檔案,內容如下:
- helloGtk.c
首先include必要的GTK標頭檔案,接著先看到gtk_init(),這個函式會先初始化函式庫,設定預設信號處理,並讓GTK有機會處理傳遞給程式的命令列引數,GTK會檢查是否有以下的引數並處理:
- –gtk-module
- –g-fatal-warnings
- –gtk-debug
- –gtk-no-debug
- –gdk-debug
- –gdk-no-debug
- –display
- –sync
- –name
- –class
這些引數會從引數列中移除,剩下的部份留待您自己的程式邏輯來處理。
GTK雖然使用C來撰寫,但是透過GObject函式庫,可以支援物件導向的物件封裝、繼承觀念,透過巨集還可以支援多型的觀念,一個GTK物件階層範例如下所示:
GObject
+--GInitiallyUnowned
+-- GtkObject
+-- GtkWidget
+-- GtkContainer
+-- GtkBin
+-- GtkWindow
gtk_window_new()會建立一個GtkWindow,這是一個基本的視窗物件,GtkWindow繼承自GtkBin,GtkBin繼承自 GtkContainer,GtkContainer可以容納其它widget,所以在GtkWindow中可以置放其它的widget,而它們全都是 GtkWidget的後代。
在函式庫的組織上,GTK+的參考手冊 中,若要查詢與GtkWindow設定的相關函式,也就是gtk_window開頭的函式名稱,則直接查詢 GtkWindow 的說明文件。
在範例中,您使用gtk_window_new()在記憶體中產生一個GtkWindow(但還不是真正出現在螢幕畫面中),參數設定為GtkWindowType,有兩個可用的設定:
- GTK_WINDOW_TOPLEVEL:一個有外框的標準GTK視窗。
- GTK_WINDOW_POPUP:一個蹦現視窗,像是對話方塊、蹦現選單或提示文字。
若要設定GtkWindow標題文字,則使用gtk_window_set_title(),GTK_WINDOW巨集用以將window物件轉型為GtkWindow型態。
gtk_window_new()只是在記憶體中產生一個GtkWindow,若要真正在螢幕畫面中顯示GTK的widget,則使用 gtk_widget_show(),最後呼叫gtk_main(),這會將程式的控制權交給GTK,由GTK來等待鍵盤、按鈕等事件或是檔案IO通知。
您可以使用以下的指令來進行編譯與執行:
$ gcc helloGtk.c -o helloGtk `pkg-config --cflags --libs gtk+-2.0` $ ./helloGtk |
pkg-config會先取得GTK的標頭檔位置與函式庫資訊,然後再供給gcc進行編譯,一個程式的執行畫面如下所示:
由於gtk_main()會將控制權交給了GTK,直到呼叫gtk_main_quit()之前都不會返回,這個範例目前還沒有實作這個部份(之後還會介紹如何實作),因此這個視窗您按下右上 X 鈕也不會真正關閉,而必須在文字模式下先使用Ctrl+C強制中斷程式。
Ubuntu 下的哈囉!GTK+!相关推荐
- c语言和gtk实现的游戏,Ubuntu下用glade和GTK+开发C语言界面程序(一)
前言:对于大学中计算机系的每年暑假的课设有太多想说的,能从中学到非常多东西,当然不排除打酱油的,这些能够掠过哦,凡事都打酱油.人生也是打酱油的吧. 2333. 对于大三曾经的课设一般的要求都是用C写的 ...
- ubuntu下gvim启动出现gtk warning Invalid input string
问题: 安装 Ubuntu 10.04 Lucid Lynx后,GVim无法正常显示中文菜单. 错误信息: 引用: Gtk-WARNING **: Invalid input string 原 因: ...
- linux安装gtk命令,Ubuntu 下安装 GTK2.0
Ubuntu 下安装GTK2.0命令 安装命令: sudo apt-get install gnome-core-devel sudo apt-get install libglib2.0-doc l ...
- 搭建Ubuntu下c/c++编译环境【转】
1. 安装Ubuntu. 2. 安装gcc 方法一: sudo apt-get install build-essential 安装完了可以执行 gcc--version的 ...
- ubuntu mysql 驱动_怎么在Ubuntu下为MySQL添加ODBC驱动?
学过Web开发的人应该都知道ODBC,这个微软自创的数据库连接方法使得在Windows下让程序连接数据库非常容易,比如Java的ODBC连接MSSQL.Access等等.如果要开发一个跨平台跨数据库的 ...
- ubuntu下如何切换输入法
我的ubuntu下安装了2种中文输入法,scim,fcitx.一直在用fcitx,但是不知何故,fcitx最近不能选取第二候选词,所以,决定换到scim下. sudo apt-get install ...
- 网站设计软件linux,ubuntu下的网页设计 网页制作软件工具.pdf
ubuntu下的网页设计 网页制作软件工具.pdf ubuntu/linux 下的网页设计网页制作软件工具 1. Bluefish 是一个基于Gtk 的 HTML 的编辑器,它支持语法加亮,支持 HT ...
- Ubuntu下安装NS3
Ubuntu下使用bake安装NS3 ns3让我不得不爱,初次接触ns3,望与同学能够一同学习探讨! [注]以下操作参考于NS官网: https://www.nsnam.org/wiki/Instal ...
- ubuntu下安装google拼音输入法
ubuntu下安装google拼音输入法 step 1:设置root帐号密码 输入命令: sudo passwd root 根据提示输入root帐号密码. step 2:保证以root帐号权限进行后续 ...
最新文章
- 【CV中的注意力机制】史上最强ResNet变体--ResNeSt
- push_heap算法 (即满足max-heap条件,最大值在根节点)
- Python的输入指令、格式化输出、基本运算符
- Java:封装的概念,UML类图,构造方法,this关键字,static关键字,方法重载,包package
- android百分比布局适配,安卓屏幕适配-百分比布局
- Java匿名内部类里为什么能用外部变量
- 学生管理系统php网站,学生信息管理系统 网站之modify.php
- 台式linux桌面远程链接华为云windows服务器桌面
- 华为PLC-IoT生态联盟成立,携手合作伙伴共赢智慧物联新时代
- 摇一摇根据城市位置推荐酒店
- 神策分析 2.1 重磅上线!报警诊断、多主体分析、渠道追踪等赋能企业数字化经营...
- graphpad饼状图_Graphpad Prism 堆叠图
- win10虚拟服务器安装xp,win10 Hyper-V 安装winxp虚拟机
- 滑动窗口协议如何实现流量控制
- 每天学习十分钟4之工作记录
- 最新的北京2012年地铁规划图
- AJAX框架眼镜穿搭夏天,30度的夏天,男生应该如何穿搭?看这9种时尚组合!
- 按键精灵sayString不生效
- 【NVIDIA Jetson TK1】一,开发板重装ubuntu系统,重新刷机,重新烧系统,恢复系统
- antd的日期组件,月和周、年突然变成英文的修复