我的标头声明了GtkWidget指针。
// header file
GtkWidget *equalButton;
GtkWidget *pointButton;
GtkWidget *modeButton;
然后,实现文件(.c)将使用GtkBuilder将它们绑定到Glade对象。
我应该在哪里放置#include<gtk/gtk.h>
来使代码合理?
答案 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;
}