Включить GTK в заголовочный файл или реализацию - PullRequest
0 голосов
/ 16 апреля 2020

Мой заголовок объявляет указатели GtkWidget.

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

И файл реализации (. c) собирается связать их с объектами glade с помощью GtkBuilder.

Где я должен поставить #include<gtk/gtk.h> чтобы код был разумным?

1 Ответ

1 голос
/ 17 апреля 2020

Я предлагаю вам сделать следующее (здесь в качестве примера я использую проект 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 файл (компоненты. 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();
}

Основной файл (основной. 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, а затем указатель может передаваться по различным функциям вашего кода. Это в значительной степени зависит от того, как вы хотите построить свой код. В приведенном выше примере компоновщик находится в основном файле. c, но его можно легко переместить в файл компонентов. 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;
}
...