Ubuntu 下面安装gtk+-2.0

apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具

apt-get install gnome-core-devel #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件

apt-get install pkg-config #用于在编译GTK程序时自动找出头文件及库文件位置

 

apt-get install devhelp #这将安装 devhelp GTK文档查看程序

apt-get install libglib2.0-doc libgtk2.0-doc #这将安装 gtk/glib 的API参考手册及其它帮助文档

apt-get install glade libglade2-dev #这将安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库。

apt-get install libgtk2.0*, gtk+2.0所需的所有文件统通下载安装完毕。

应用程序编译命令:gcc test.c `pkg-config --cflags --libs gtk+-2.0`,编译通过,运行正常。

pkg-config是一个用来管理包的程序,在控制台输入 pkg-config --cflags --libs gtk+-2.0,可以发现输出的文本包括了gcc编译gtk+2.0所需要的所有选项(头文件目录和库文件)。

这里有一点需要注意, gcc test.c `pkg-config --cflags --libs gtk+-2.0`, pkg-config --cflags --libs gtk+-2.0两侧的引号并不是真正的引号,而是键盘数字件那一行,最左边的那个字符。如果错用了单引号,gcc无法使用 pkg-config --cflags --libs gtk+-2.0产生的文本作为编译选项。构造程序。



超级简单的例子

我们要“制造”一个超级简单的GTK+程序。就是显示一个空白的窗口。

#include <gtk/gtk.h>

int main( int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(window);

  gtk_main();

  return 0;
}

这个例子就是为我们显示了一个空白的窗口。

  gcc -o simple simple.c `pkg-config --libs --cflags gtk+-2.0`

这就是我们用来编译这个例子的命令。下面我们将对这个简单的程序进行详细的解读。

 gtk_init(&argc, &argv);

这就是在初始化整个GTK+程序,是每一个GTK+程序必不可少的部分。

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

这里我们首先生成了一个构件—— GtkWindow. 这个窗口构件的种类是GTK_WINDOW_TOPLEVEL. . Toplevel 窗口拥有一个标题栏和边框。他们同意由窗口管理器进行管理。

 gtk_widget_show(window);

在我们生成了一个窗口构件以后,必不可少的是,我们需要用这句语句来显示构件。

 gtk_main();

这句代码语句将进入“主循环”。 在这一点上,GTK+程序将安静的等待“事件”(event)的发生,以便做出相应的反应。


Simple
Figure: Simple

生成一个窗口

如果我们不安排窗口的摆放位置的话,那么窗口管理器将为我们给这个窗口“安一个家”。在下个例子中,我们将走进“窗口”。

#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), "Center");
  gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_widget_show(window);

  g_signal_connect_swapped(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);

  gtk_main();

  return 0;
}

在我们上面的这个例子,我将深入了解窗口构件(window widget),为窗口构件设置标题和大小。

 gtk_window_set_title(GTK_WINDOW(window), "Center");

gtk_window_set_title() 这个函数就可以为window设置一个标题,如果我们不用这个函数的话,GTK+将用源文件的名字来作为窗口的标题。

 gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);

上面这个代码片段为window设置了 230x150 像素的大小。值得注意的是,我们这里提到的大小是指主窗口的大小;而不包括窗口管理器提供的修饰或者装饰的部分。

 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

这段代码把窗口设定在显示器的中央。

 g_signal_connect_swapped(G_OBJECT(window), "destroy",
     G_CALLBACK(gtk_main_quit), NULL);

在之前的例子中,我们没有设置窗口的关闭,当我按下右上角的“X”时。我们可以看到,如果是从命令行的方式来运行例子程序的话,默认情况下窗口程序并不会对你刚刚的动作作出反应(当然,最新的窗口管理器,譬如X11会强行关闭)。我们必须要明确为这个例子程序连接上一个关闭的信号(the destroy signal),就是 gtk_main_quit() 这个函数。

应用程序图标的制作

在下面的例子中,我们会进行应用程序图标的制作。大多数的窗口管理器都会把图标放置在标题栏的左上方和任务栏上。

#include <gtk/gtk.h>

GdkPixbuf *create_pixbuf(const gchar * filename)
{
   GdkPixbuf *pixbuf;
   GError *error = NULL;
   pixbuf = gdk_pixbuf_new_from_file(filename, &error);
   if(!pixbuf) {
      fprintf(stderr, "%s\n", error->message);
      g_error_free(error);
   }

   return pixbuf;
}

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), "icon");
  gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png"));
  gtk_widget_show(window);

  g_signal_connect_swapped(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);

  gtk_main();

  return 0;
}

上面的就是为一个填加上图标的窗口程序了.

 gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png"));

函数gtk_window_set_icon() 是为窗口设置图标用的。函数 create_pixbuf() 作用是从一个png图象文件中生成 GdkPixbuf 类型数据。

 pixbuf = gdk_pixbuf_new_from_file(filename, &error);

根据官方公布的文档说明,函数 gdk_pixbuf_new_from_file() 一个文件中加载图象数据,从而生成一个新的 pixbuf。 至于文件中包含图象的格式,是由系统自动检测的。如果该函数返回值是NULL的话,程序就会出现错误。


Icon     Taskbar Icon
Figure: Icon

增加 和 减少

下面我们将用一个简单的示例,来完成了“GTK+程序设计初级教程”的第一阶段,在这里我们用到了三个构件:两个按钮和一个标签。这个标签将保存一个整数,两个按钮会分别增加和减少这个数。

#include <gtk/gtk.h>

gint count = 0;
char buf[5];

void increase(GtkWidget *widget, gpointer label)
{
  count++;

  sprintf(buf, "%d", count);
  gtk_label_set_text(label, buf);
}

void decrease(GtkWidget *widget, gpointer label)
{
  count--;

  sprintf(buf, "%d", count);
  gtk_label_set_text(label, buf);
}

int main(int argc, char** argv) {

  GtkWidget *label;
  GtkWidget *window;
  GtkWidget *frame;
  GtkWidget *plus;
  GtkWidget *minus;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(window), 250, 180);
  gtk_window_set_title(GTK_WINDOW(window), "+-");

  frame = gtk_fixed_new();
  gtk_container_add(GTK_CONTAINER(window), frame);

  plus = gtk_button_new_with_label("+");
  gtk_widget_set_size_request(plus, 80, 35);
  gtk_fixed_put(GTK_FIXED(frame), plus, 50, 20);

  minus = gtk_button_new_with_label("-");
  gtk_widget_set_size_request(minus, 80, 35);
  gtk_fixed_put(GTK_FIXED(frame), minus, 50, 80);

  label = gtk_label_new("0");
  gtk_fixed_put(GTK_FIXED(frame), label, 190, 58); 

  gtk_widget_show_all(window);

  g_signal_connect(window, "destroy",
      G_CALLBACK (gtk_main_quit), NULL);

  g_signal_connect(plus, "clicked", 
      G_CALLBACK(increase), label);

  g_signal_connect(minus, "clicked", 
      G_CALLBACK(decrease), label);

  gtk_main();

  return 0;
}

这个示例代码完的功能是:增加和减少对象GtkLabel的值。

 g_signal_connect(plus, "clicked", 
     G_CALLBACK(increase), label);

我们把回调函数increase()和增加按钮进行了连结。还有值得注意的是我们把label作为回调函数调用的参数。 这样的话就可以在回调函数increase()中对label进行处理。

 count++;

 sprintf(buf, "%d", count);
 gtk_label_set_text(label, buf);

在“增加”的回调函数中,增加数字。 然后在label中的数字就会随之增加。

 

Gtk与Qt编译环境安装与配置

配置基础开发环境GCC

刚装好的系统中已经有GCC了,但是这个GCC几乎什么文件都不能编译,因为缺少一些必须的头文件,所以要安装build-essential这个软件包。 可以在新立得里面搜索build-essential或输入下面命令:

sudo apt-get install build-essential

[编辑] 程序示例

安装完成后写一个C语言程序testc.c测试一下。

#include <stdio.h>
int main()
{
    printf ("Hello Ubuntu!");
    return 0;
}
gcc testc.c -o testc
./testc

输出:

Hello Ubuntu!

[编辑] 安装GTK/GNOME开发环境

安装GTK环境只要安装一个libgtk2.0-dev就可以了,而安装gnome开发环境的话,需要装gnome-core-devel,它包含GTK开发包。 但在一般情况下,我们需要有一个ide开发环境,需要帮助文件,于是我们安装

sudo apt-get install gnome-devel gnome-devel-docs

[编辑] 程序示例

安装完成后我们也同样做个测试程序 (Code Language : C , only 1 header file )

#include <gtk/gtk.h>
void hello(GtkWidget *widget,gpointer data)
{
	g_print("Hello Ubuntu!\n");
}
gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
{
	g_print ("delete event occurred\n");
	return(TRUE);
}
void destroy(GtkWidget *widget,gpointer data)
{
	gtk_main_quit();
}
int main( int argc, char *argv[] )
{
	GtkWidget *window;
	GtkWidget *button;
	gtk_init (&argc, &argv);
	window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_signal_connect (GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL);
	gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (destroy), NULL);
	gtk_container_set_border_width (GTK_CONTAINER (window), 10);
	button = gtk_button_new_with_label ("Hello Ubuntu!");
	gtk_signal_connect (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (hello), NULL);
	gtk_signal_connect_object (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (window));
	gtk_container_add (GTK_CONTAINER (window), button);
	gtk_widget_show (button);
	gtk_widget_show (window);   /*显示一个窗口*/
	gtk_main();   /*进入主循环*/
	return(0);
}

用下面命令编译运行

$ gcc gtktest.c -o gtktest  `pkg-config --cflags --libs gtk+-2.0` 
$ ./gtktest

//`pkg-config --cflags --libs gtk+-2.0` 库引用

会显示一个带有一个按钮的窗口,点击按钮以后窗口关闭,命令行显示Hello Ubuntu!

[编辑] 安装QT3/KDE3开发环境

配置qt3开发环境的话,我们需要安装libqt3-mt-dev,一般还需要qt3-assistant,qt3-designer。不过我们可以直接安装整个KDE编译环境。

库、工具及其帮助文档:

sudo apt-get install kdesdk kdesdk-doc

IDE开发环境及其帮助文档:

sudo apt-get install kdevelop kdevelop-doc


[编辑] 程序示例

下面是简单的qt3的测试程序。

首先编写源代码。 新建文件夹qt3hello,然后再里面新建文件 main.cpp,内容如下:(Languagee C++, 2 header files so it looks so simple )

#include <qapplication.h>
#include <qpushbutton.h>
 
int main( int argc, char **argv )
{
	QApplication a( argc, argv );
 
	QPushButton hello( "Hello Ubuntu!", 0 );
	hello.resize( 100, 30 );
 
	a.setMainWidget( &hello );
	hello.show();
	return a.exec();
}

用下面命令编译运行

$ qmake -project
$ qmake
$ make
$ ./qt3hello

即可看到带一个按钮的程序界面。

[编辑] 安装QT4/KDE4开发环境

配置qt4开发环境:

sudo apt-get install libqt4-dev qt4-designer qt4-doc

配置kde4开发环境:

sudo apt-get install kde4-devel

IDE:

sudo aptitude install kdevelop-kde4

Ubuntu 9.10请这样做:

sudo aptitude install kde-devel

[编辑] 程序示例

下面是简单的qt4的测试程序。

首先编写源代码。 新建文件夹qt4hello,然后再里面新建文件 main.cpp,内容如下:

#include <QApplication>
#include <QPushButton> 
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
    QPushButton hello("Hello Ubuntu!");
    hello.resize(100, 30);
 
    hello.show();
    return app.exec();
}

用下面命令编译运行

$ qmake-qt4 -project
$ qmake-qt4
$ make
$ ./qt4hello

即可看到带一个按钮的程序界面。


Increase - Decrease
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GTK+ 2.0 教程 译者: huzheng,konghui,ferry,carton,yang_yi,ddd,tingle 版本号: V_0.1.0 2002年 6 月25 日 本文是有关通过 C 语言接口使用 GTK (the GIMP Toolkit) 的教程。 Table of Contents 中文版说明 简介 从这里开始 用 GTK 来写 Hello World 编译 Hello World 程序 信号和回调函数的原理 事件 Hello World 详解 继续 数据类型 深入探索信号处理函数 改进了的 Hello World 组装构件 组装盒的原理 盒的细节 组装示范程序 用表组装 表组装示例 构件概述 类型转换 构件的组织 无窗口构件 按钮构件 一般按钮 Normal Buttons 开关按钮 Toggle Buttons 复选按钮 Check Buttons 单选按钮 Radio Buttons 调整对象 Adjustments 创建一个调整对象 轻松使用调整对象 “调整对象”的内部机制 范围构件 Range Widgets 滚动条构件 Scrollbar Widgets 比例构件 Scale Widgets 创建一个比例构件 函数和信号(至少讲了函数) 常用的范围函数 设置更新方式 获得和设置调整对象 键盘和鼠标绑定 示例 杂项构件 标签 Labels 箭头 Arrows 工具提示对象 The Tooltips Object 进度条 Progress Bars 对话框 Dialogs 标尺 Rulers 状态栏 Statusbars 文本输入构件 Text Entries 微调按钮 Spin Buttons 组合框 Combo Box 日历 Calendar 颜色选择 Color Selection 文件选择 File Selections 容器构件 Container Widgets 事件盒 The EventBox 对齐构件 The Alignment widget 固定容器 Fixed Container 布局容器 Layout Container 框架 Frames 比例框架 Aspect Frames 分栏窗口构件 Paned Window Widgets 视角 Viewports 滚动窗口 Scrolled Windows 按钮盒 Button Boxes 工具栏 Toolbar 笔记本 Notebooks 菜单构件 手工创建菜单 手工菜单示例 使用套件 套件示例 无文档构件 快捷标签 Accel Label 选项菜单 Option Menu 菜单项 Menu Items 复选菜单项 Check Menu Item 单选菜单项 Radio Menu Item 分隔菜单项 Separator Menu Item 分离菜单项 Tearoff Menu Item 曲线图 Curves 绘图区 Drawing Area 字体选择对话框 Font Selection Dialog 消息对话框 Message Dialog Gamma 曲线图 图像 Image 插头和插座 Plugs and Sockets 树视区 Tree View 文本视区 Text View 设置构件的属性 超时、IO 和 Idle 函数 超时 Timeouts 监控IO Idle 函数 高级事件和信号处理 信号函数 连接和断开信号处理函数 阻塞和反阻塞信号处理函数 发出和停止信号 信号的发射和传播 操作选中区 概述 获取选中区信息 提供选中区 拖放 概述 属性 函数 设置源构件 源构件上的信号 设置目的构件 目的构件上的信号 GLib 定义 双向链表 单向链表 存储管理 计时器 字符串处理 实用程序和错误处理函数 GTK 的 rc 文件 rc 文件的功能 GTK rc 文件的格式 rc 文件示例 编写你自己的构件 概述 一个构件的剖析 创建一个复合构件 介绍 选择一个父类 头文件 _get_type() 函数 _class_init() 函数 _init() 函数 其余的... 从头创建构件 介绍 在屏幕上显示构件 表盘构件的原形 主体 gtk_dial_realize() 大小磋商 gtk_dial_expose() 事件处理 可能的增强 深入的学习 涂鸦板,一个简单的绘图程序 概述 事件处理 绘图区构件和绘图 添加XInput支持 允许扩展设备信息 使用扩展设备信息 得到更多关于设备的信息 进一步的讲解 编写 GTK 应用程序的技巧 投稿 鸣谢 教程的版权和许可声明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值