在头文件或实现中包含GTK

时间:2020-04-16 04:14:13

标签: c gtk header-files

我的标头声明了GtkWidget指针。

// header file    
GtkWidget   *equalButton;
GtkWidget   *pointButton;
GtkWidget   *modeButton;

然后,实现文件(.c)将使用GtkBuilder将它们绑定到Glade对象。

我应该在哪里放置#include<gtk/gtk.h>来使代码合理?

1 个答案:

答案 0 :(得分:1)

我建议您执行以下操作(这里以“ Hello World”类项目为例)

头文件(components.h)

#include <gtk/gtk.h>

// declarations
extern GtkWidget *label_hello;

extern void on_btn_hello_clicked();
extern void on_window_main_destroy();

C文件(components.c)

#include "components.h"

// definition
GtkWidget *label_hello;

void on_btn_hello_clicked()
{
    ...
    gtk_label_set_text(GTK_LABEL(label_hello), "Hello, world!");
    ...
}

void on_window_main_destroy()
{
    gtk_main_quit();
}

主文件(main.c)

#include "components.h"

int main(int argc, char *argv[])
{
     ...
     GtkBuilder *builder;
     builder = gtk_builder_new();
     gtk_builder_add_from_file (builder, "glade/window_main.glade", NULL);

     window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));

     ...

     label_hello = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_hello"));

     ...    
}

注意:可以在.c文件的函数中初始化构建器,然后可以在代码的不同函数之间传递指针。这在很大程度上取决于您要如何构建代码。在上面的示例中,构建器位于main.c文件中,但可以轻松将其移动到components.c文件中。例如,您可以执行以下操作:

GtkBuilder *get_builder_instance(){

    GtkBuilder * builder = malloc(sizeof(GtkBuilder));
    builder = gtk_builder_new();
    gtk_builder_add_from_file (builder, "glade/window_main.glade", NULL);

    return builder;
}