admin 管理员组

文章数量: 887021

实践中表明,纯粹利用 gtk 函数来创建 UI 是很繁琐的事,需要编写很多代码。怎样才能快速统一的建立 UI 布局呢?

可喜的是 GTK 提供了一个 GtkBuilder 用于快速创建界面。它读取一个 xml 文件。按照 xml 文件中所描述的来创建界面。因此我们需要编写 xml 文件。

创建example.ui ,内容如下:

True

GtkBuilder

30

True

True

Button 1

0

0

True

Button 2

1

0

True

0

1

2

再创建源文件 example.c  ,内容如下:

#include

static void print_hello(GtkWidget *button , gpointer data);

static void activate(GtkApplication *app , gpointer data);

static void print_entry(GtkWidget * button , gpointer entry);

int main(int argc , char **argv)

{

GtkApplication *app;

int app_status;

app = gtk_application_new("org.rain.example" , G_APPLICATION_FLAGS_NONE);

g_signal_connect(app , "activate" , G_CALLBACK(activate) , NULL);

app_status = g_application_run(G_APPLICATION(app) , argc , argv);

g_object_unref(app);

return app_status;

}

static void print_hello(GtkWidget *button , gpointer data)

{

printf("Hello,world!\n");

}

static void print_entry(GtkWidget * button , gpointer entry)

{

const gchar *entry_buf;

//获取输入框的内容,返回一个 const gchar 指针 , gchar 即是 char

entry_buf = gtk_entry_get_text( GTK_ENTRY(entry) );

if('\0' != entry_buf[])

printf("%s\n" , entry_buf);

}

static void activate(GtkApplication *app , gpointer data)

{

GtkBuilder *builder;

GObject *window;

GObject *button;

GObject *entry;

//创建一个 GtkBuilder 。

builder = gtk_builder_new();

//将描述 UI 的文件添加到 Builder 中。

gtk_builder_add_from_file(builder , "example.ui" , NULL);

//可以用该函数获取 Builder 创建的对象,根据 example.ui 文件中设置的 object 的 id 来获取。

window = gtk_builder_get_object(builder , "window");

gtk_application_add_window(app , GTK_WINDOW(window));

//注意该函数返回的是一个指向 GObject 对象的指针。

button = gtk_builder_get_object(builder , "print_hello");

//设置按钮标签

gtk_button_set_label ( GTK_BUTTON (button) , "PrintHello");

g_signal_connect(button , "clicked" , G_CALLBACK(print_hello) , NULL);

//获取输入框对象。

entry = gtk_builder_get_object(builder , "entry");

button = gtk_builder_get_object(builder , "print_entry");

gtk_button_set_label ( GTK_BUTTON (button) , "PrintEntry");

//调用 print_entry 时传递用户参数 entry 。

g_signal_connect(button , "clicked" , G_CALLBACK(print_entry) , entry);

}

编译,运行:

gcc example.c `pkg-config --cflags --libs gtk+-3.0`

./a.out

运行结果如下:

aaarticlea/png;base64,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

本文标签: 重装 再走 Linux ctg GTK