关闭

Ubuntu 下面安装gtk+-2.0

572人阅读 评论(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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:85147次
    • 积分:1076
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:104篇
    • 译文:0篇
    • 评论:15条
    文章分类
    最新评论