2017-01-27 2 views
4

Недавно я начал изучать, как создавать 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 руководстве:

ответ

7

Использование GtkApplication в настоящее время является предпочтительным способом для новых приложений. Более старые кодовые вызовы gtk_init и gtk_main вручную.

+1

Справедливо, но как использовать GtkApplication в сочетании с GtkBuilder? – Zyphicx

+1

Это описано на той же странице: вы создаете файл 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

Смежные вопросы