GTK+ 2.0 入门教程

网友投稿 1088 2022-11-10

GTK+ 2.0 入门教程

GTK+ 2.0 入门教程

GTK+程序的基本框架分析

gtk_init():这个函数必须在控件定义之前使用,参数由命令行中解析出来并且送到该程序中。

主要作用是设立 GTK+运行环境,自动完成一些必要的初始化工作。

创建 GtkWidget 窗口控件,并且让它显示出来。

gtk_main():程序运行停在这里等待事件(如键盘事件或鼠标事件)的发生,等待用户来操作窗口。这个函数在所有

的 GTK+程序都要调用。

GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

GtkWidget 是 GTK+控件类型,GtkWidget * 能指向任何控件的指针类型。

gtk_window_new()创建一个窗口并返回这个窗口的控件指针。

GTK_WINDOW_TOPLEVEL 指明窗口的类型为最上层的主窗口,它最常用。

gtk_widget_show(window);用来显示上一步创建的窗口控件

窗口的详细设置

窗口的创建

GtkWidget *gtk_window_new(GtkWindowType type);

GtkWindowType 是一个枚举,有两种情况:

GTK_WINDOW_TOPLEVEL:有边框

GTK_WINDOW_POPUP:

没边框

标题的设置

void gtk_window_set_title(GtkWindow *window, const gchar *title);

窗口最小大小的设置

void gtk_widget_set_size_request(GtkWidget *widget,gint width,gint height);

窗口伸缩设置( FALSE 为不可伸缩 )

void gtk_window_set_resizable(GtkWindow *window, gboolean resizable);

显示或隐藏所有控件

void gtk_widget_show_all(GtkWidget *widget);

void gtk_widget_hide_all(GtkWidget *widget);

窗口在显示器位置的设置

void gtk_window_set_position(

GtkWindow *window,

GtkWindowPosition position);

position 常用有 4 种情况:

GTK_WIN_POS_NONE: 不固定

GTK_WIN_POS_CENTER: 居中

GTK_WIN_POS_MOUSE: 出现在鼠标位置

GTK_WIN_POS_CENTER_ALWAYS: 窗口总是居中

#include // 头文件 int main( int argc,char *argv[] ) { gtk_init(&argc, &argv); // 初始化 // 创建顶层窗口 GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // 设置窗口的标题 gtk_window_set_title(GTK_WINDOW(window), "Window"); // 设置窗口在显示器中的位置为居中 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); // 设置窗口的最小大小 gtk_widget_set_size_request(window, 400, 300); // 固定窗口的大小 gtk_window_set_resizable(GTK_WINDOW(window), FALSE); // "destroy" 和 gtk_main_quit 连接 g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window);// 显示窗口全部控件// gtk_widget_hide_all(window);// 隐藏窗口 gtk_main(); // 主事件循环 return 0;

3 进阶体验---带按钮的窗口

创建一个带内容的按钮

GtkWidget *gtk_button_new_with_label(const gchar *label );

获得按钮上面的文本内容

const gchar *gtk_button_get_label(GtkButton *button );

把控件添加到窗口容器里

void gtk_container_add(GtkContainer*container,GtkWidget*widget);

container:容纳控件的容器;widget:要添加的控件

v

#include // 头文件int main( int argc,char *argv[] ) { gtk_init(&argc, &argv);// 初始化 GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);// 创建顶层窗口// 设置窗口边框的宽度(窗口里的控件与窗口边框间隔为 15) gtk_container_set_border_width(GTK_CONTAINER(window), 15); // 创建按钮,文本信息为"Hello GTK+" GtkWidget *button = gtk_button_new_with_label("Hello GTK+"); const char *str = gtk_button_get_label( GTK_BUTTON(button) ); // 获得按钮的内容 printf("str = %s\n", str); // 把按钮放入窗口(窗口也是一种容器) gtk_container_add(GTK_CONTAINER(window), button); // 显示控件有两种方法:逐个显示,全部显示 // gtk_widget_show(button); // gtk_widget_show(window); gtk_widget_show_all(window); // 显示窗口全部控件 gtk_main(); // 主事件循环 return 0;}

动起来---信号与回调函数机制

信号与回调函数机制

GTK+采用了信号与回调函数来处理窗口外部传来的事件、消息或信号。当信号发生时,程序自动调用为信号连接

的回调函数。

窗口关闭时触发的常用信号:destroy, delete-event

操作按钮触发的常用信号:clicked, pressed,released

信号与回调函数的连接

gulong g_signal_connect(

gpointer instance,

const gchar *detailed_signal,

GCallback c_handler,

gpointer data );

instance:

信号的发出者

detailed_signal: 要连接信号的名称

c_handler:

回调函数的名称,需要用 G_CALLBACK()进行转换

data:

传递给回调函数的参数

回调函数的定义

信号连接函数的写法:

g_signal_connect(button, "pressed",

G_CALLBACK(callback), NULL);

回调函数的定义(参考“参考文档”)

void callback( GtkButton *button,

gpointer user_data );

button: 信号的发出者

user_data:传给回调函数的数据

#include // 头文件// 按钮按下的处理函数, gpointer 相当于void * void deal_pressed(GtkButton *button, gpointer user_data) { // 获得按钮的文本信息 const gchar *text = gtk_button_get_label( button ); // g_print() 相当于 C 语言的 printf(), gchar 相当于 char g_print("button_text = %s; user_data = %s\n", text, (gchar *)user_data);}int main( int argc,char *argv[] ) { gtk_init(&argc, &argv); // 初始化 GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // 创建顶层窗口 // 设置窗口边框的宽度(窗口里的控件与窗口边框间隔为 15) gtk_container_set_border_width(GTK_CONTAINER(window), 15); /* 当窗口关闭时,窗口会触发 destroy 信号, * 自动调用 gtk_main_quit()结束程序运行*/ g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); GtkWidget *button = gtk_button_new_with_label("Hello GTK+"); // 创建按钮 gtk_container_add(GTK_CONTAINER(window), button); // 把按钮放入窗口(窗口也是一种容器) /* 按钮按下(pressed)后会自动调用 deal_pressed() * "is pressed"是传给 deal_pressed()的数据 */ g_signal_connect(button, "pressed", G_CALLBACK(deal_pressed), "is pressed"); gtk_widget_show_all(window); // 显示窗口全部控件 gtk_main(); // 主事件循环 return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:hibernate使用注解简化开发
下一篇:GTK 3+ GtkProgressBar 使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~