在 header 文件或实现中包含 GTK

Include GTK in header file or implementation

我的 header 声明了 GtkWidget 指针。

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

并且实现 (.c) 文件将使用 GtkBuilder 将它们绑定到林间空地 objects。

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

我建议您执行以下操作(这里我以 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;
}