Недавно я начал изучать, как создавать GUI-приложения с помощью GTK + (3), следуя инструкциям на веб-сайте gnome (первая ссылка ниже).Каков предпочтительный способ записи GTK-приложений?
Итак, я начал изучать первые несколько руководств, и все было замечательно. Вот некоторые из ранних кодов, которые я написал:
#include <gtk/gtk.h>
static void activate (GtkApplication* app, gpointer user_data){
GtkWidget *window;
GtkWidget *button_box;
GtkWidget *button;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "First application");
gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
gtk_container_add(GTK_CONTAINER(window), button_box);
button = gtk_button_new_with_label("Click this!");
g_signal_connect_swapped(button, "clicked", G_CALLBACK(g_print), "Hello, world!\n");
g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), window);
gtk_container_add(GTK_CONTAINER(button_box), button);
gtk_widget_show_all (window);
}
int main(int argc, char *argv[]){
GtkApplication *app;
int status;
app = gtk_application_new ("com.example.application", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
Все работало точно так, как я хотел. Затем они представили Gtk Builder, и я подумал, что это действительно аккуратно, поэтому я использовал это для создания приложения.Итак, я очень смутился и решил посмотреть код из других источников, чтобы посмотреть, как они написали свои GTK-приложения. Я видел, как они использовали такие вещи, как gtk_init()
, gtk_main()
и gtk_window_new(GTK_WINDOW_TOPLEVEL)
. Это совсем не похоже на код, который я ранее размещал.
Итак, как я понимаю, существует несколько способов написания GTK-приложений, используя либо GtkApplication
, либо gtk_init()
. Один из них устарел и больше не предпочитает? Если да, то какой из них предпочтительнее или должен быть предпочтительным?
Несколько ссылок на двух способов, которые я нашел в официальном Gtk руководстве:
Справедливо, но как использовать GtkApplication в сочетании с GtkBuilder? – Zyphicx
Это описано на той же странице: вы создаете файл ut GtkBuilder, вы создаете файл GResource (необязательный, но более чистый и облегчает распространение вашего приложения), вы компилируете ресурс и вызываете gtk_widget_class_set_from_template и передаете ему местоположение вашего ui ресурс. Это объясняется в разделе ["popup the window"] (https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.). – liberforce