之前在ubuntu12.04x86上折腾gtk失败。
下载重装系统,ubuntu14.04x64继续折腾
有图有真相
- #安装gcc/g++/gdb/make 等基本编程工具
- sudo apt-get install build-essential
- #安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件
- #这个要安好久,安好后,后面的都已经安装了貌似
- sudo apt-get install gnome-core-devel
- #用于在编译GTK程序时自动找出头文件及库文件位置
- sudo apt-get install pkg-config
- #安装 devhelp GTK文档查看程序
- sudo apt-get install devhelp
- #安装 gtk/glib 的API参考手册及其它帮助文档
- sudo apt-get install libglib2.0-doc libgtk2.0-doc
- #安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库
- sudo apt-get install glade libglade2-dev
- #后面这个可以安装2.0或者3.0
- #2.0是sudo apt-get install libgtk2.0-dev
- #安装gtk3.0 或者 将gtk+3.0所需的所有文件统通下载安装完毕
- sudo apt-get install libgtk-3-dev
- #查看1.2.x版本
- pkg-config --modversion gtk+
- #查看 2.x 版本
- pkg-config --modversion gtk+-2.0
- #查看 3.x 版本
- pkg-config --modversion gtk+-3.0
- #查看pkg-config的版本
- pkg-config --version
- #查看是否安装了gtk
- pkg-config --list-all | grep gtk

无视第一个找不到
创建个git01.c
- //hello world
- #include <gtk/gtk.h>
- int main(int argc,char *argv[])
- {
- GtkWidget *window;
- GtkWidget *label;
- gtk_init(&argc,&argv);
- /* create the main, top level, window */
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- /* give it the title */
- gtk_window_set_title(GTK_WINDOW(window),"Hello World");
- /* connect the destroy signal of the window to gtk_main_quit
- * when the window is about to be destroyed we get a notification and
- * stop the main GTK+ loop
- */
- g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);
- /* create the "Hello, World" label */
- label = gtk_label_new("Hello, World");
- /* and insert it into the main window */
- gtk_container_add(GTK_CONTAINER(window),label);
- /* make sure that everything, window and label, are visible */
- gtk_widget_show_all(window);
- /* start the main loop, and let it rest until the application is closed */
- gtk_main();
- return 0;
- }
编译gtk2.0
senrsl@senrsl-desktop:~/test/gtk$ gcc -o gtk01 gtk01.c `pkg-config --cflags --libs gtk+-2.0`
编译gtk3.0
senrsl@senrsl-desktop:~/test/gtk$ gcc -o gtk01 gtk01.c `pkg-config --cflags --libs gtk+-3.0`

要注意,编译时那俩点不是单引号,是左手小指最左上那个。

然后测试helloworld02
发现使用gtk3.0编译有问题,gtk2.0编译就咩有问题
- /* Hello world 示例 */
- #include<gtk-2.0/gtk/gtk.h>/*注意这里必须要这样写,要不然会因找不到头文件而发生 编译错误*/
- /* 这是一个回调函数。data 参数在本示例中被忽略。
- * 后面有更多的回调函数示例。*/
- void hello(GtkWidget *widget, gpointer data)
- {
- g_print("Hello World\n");
- }
- gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
- {
- /* 如果你的 "delete_event" 信号处理函数返回 FALSE,GTK 会发出 "destroy" 信号。
- * 返回 TRUE,你不希望关闭窗口。
- * 当你想弹出"你确定要退出吗?"对话框时它很有用。*/
- g_print("delete event occurred\n");
- /* 改 TRUE 为 FALSE 程序会关闭。*/
- return TRUE;
- }
- /* 另一个回调函数 */
- void destroy(GtkWidget *widget, gpointer data)
- {
- gtk_main_quit();
- }
- int main(int argc, char *argv[])
- {
- /* GtkWidget 是构件的存储类型 */
- GtkWidget *window;
- GtkWidget *button;
- /* 这个函数在所有的 GTK 程序都要调用。参数由命令行中解析出来并且送到该程序中*/
- gtk_init(&argc, &argv);
- /* 创建一个新窗口 */
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- /* 当窗口收到 "delete_event" 信号 (这个信号由窗口管理器发出,通常是"关闭"
- * 选项或是标题栏上的关闭按钮发出的),我们让它调用在前面定义的 delete_event() 函数。
- * 传给回调函数的 data 参数值是 NULL,它会被回调函数忽略。*/
- g_signal_connect(G_OBJECT(window), "delete_event",
- G_CALLBACK(delete_event), NULL);
- /* 在这里我们连接 "destroy" 事件到一个信号处理函数。
- * 对这个窗口调用 gtk_widget_destroy() 函数或在 "delete_event" 回调函数中返回 FALSE 值
- * 都会触发这个事件。*/
- g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
- /* 设置窗口边框的宽度。*/
- gtk_container_set_border_width(GTK_CONTAINER(window), 10);
- /* 创建一个标签为 "Hello World" 的新按钮。*/
- button = gtk_button_new_with_label("Hello World");
- /* 当按钮收到 "clicked" 信号时会调用 hello() 函数,并将NULL传给
- * 它作为参数。hello() 函数在前面定义了。*/
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(hello), NULL);
- /* 当点击按钮时,会通过调用 gtk_widget_destroy(window) 来关闭窗口。
- * "destroy" 信号会从这里或从窗口管理器发出。*/
- g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(
- gtk_widget_destroy), window);
- /* 把按钮放入窗口 (一个 gtk 容器) 中。*/
- gtk_container_add(GTK_CONTAINER(window), button);
- /* 最后一步是显示新创建的按钮和窗口 */
- gtk_widget_show(button);
- gtk_widget_show(window);
- /* 所有的 GTK 程序必须有一个 gtk_main() 函数。程序运行停在这里
- * 等待事件 (如键盘事件或鼠标事件) 的发生。*/
- gtk_main();
- return 0;
- }

好神奇~
接下来还需要:
gtk by eclipse
gtk 内嵌网页
好吧,明天回归弄C语言。
2014-07-23 20:12:46
--
senRsl
senRsl
没有评论 :
发表评论