gtk把变量给label_GTK入门学习:控件的添加

上面的例子实在是太简陋了,它里面什么都没有。接下来我们一起为窗口添加控件。在添加之前,我们先了解一下控件。

控件是对数据和方法的封装。控件有自己的属性和方法。属性是指控件的特征。方法是指控件的一些简单而可见的功能。如按钮就是一个控件,这个按钮是方形的,里面有张图片,这是我们能看到外观属性,同时,这个按钮具备被人按下的功能。

GTK中控件主要分为两类:容器控件,非容器控件。

容器控件:它可以容纳别的控件,我们可以理解为盒子,盒子拿来装东西。容器控件又分为两类,一类只能容纳一个控件,如窗口,按钮;另一类能容纳多个控件,如布局控件。

非容器控件:它不可以容纳别的控件,如标签、行编辑。

前面我们写的空白窗口是能容纳一个控件的控件,现在我们要做的是,给这个窗口添加一个按钮。

首先,我们需要创建一个按钮,然后需要把按钮添加到窗口,接着,显示按钮控件。

按钮的创建:

GtkWidget *gtk_button_new_with_label(const gchar *label);

label:按钮上的字符串类型,gchar相当于C语言的char

返回值:按钮控件指针

容器添加控件:

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

container:容纳控件的容器

widget:要添加的控件

显示控件:

void gtk_widget_show(GtkWidget *widget);

widget:需要显示的控件

源码如下:

#include <gtk/gtk.h>

int main(int argc, char *argv[])

{

//1.gtk初始化工作

gtk_init(&argc, &argv);

//2.创建一个顶层窗口

GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//3.创建一个button,文本信息为Hello gtk

GtkWidget *button = gtk_button_new_with_label("Hello gtk");

//4.将button放入窗口中(窗口也是一种容器)

gtk_container_add(GTK_CONTAINER(window), button);

//5.显示button

gtk_widget_show(button);

//6.显示window

gtk_widget_show(window);

//7.主事件循环

gtk_main();

return 0;

}

运行结果:

5391b4159d0845e835062f9ee5a692ef.png

代码分析:

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

这里我们是把按钮添加到窗口容器里,widget为按钮指针(以上代码的button),container为窗口指针(以上代码的window),这里需要注意的是,我们创建的窗口(window)返回值为GtkWidget *类型,而gtk_container_add()的第一个参数为GtkContainer *类型,由于 GtkWidget *类型的变量为指向任何控件的万能指针,所以,在函数传参时,根据参数类型进行相应的转换,如:

gtk_container_add( (GtkContainer *)window, button);

C语言里,我们常用这种方法转换。在GTK中,很多内部变量指针类型转换都定义了宏定义,如:

#define GTK_CONTAINER(x) (GtkContainer *)(x)

所以,我们还可以这么写:gtk_container_add(GTK_CONTAINER(window), button);

那么,我们如何知道,哪个类型对应哪个宏定义呢?把要转换类型名字全部变为大写,同时,单词和单词之间以下划线“_”连接,然后,这个名字就是哪个宏定义的名字,如,(GtkButton *)x用宏定义的方法为 GTK_BUTTON(x)。

上面的代码,我们是按钮和窗口都得通过gtk_widget_show()显示出来:

gtk_widget_show(button);// 显示按钮

gtk_widget_show(window);// 显示窗口

但是,假如,窗口里有100个控件,还是这样一个一个地显示出来会比较麻烦,这时候,我们可以通过gtk_widget_show_all()显示所有的控件,里面需要传的是容纳控件的那个容器(这里为窗口)。这样,容器上的控件也会跟着显示。

gtk_widget_show_all(window);// 显示窗口上的所有控件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值