2017-01-27 4 views
4

나는 최근에 그놈 웹 사이트 (아래 첫 번째 링크)에서 자습서를 따라 GTK + (3)로 GUI 응용 프로그램을 만드는 방법을 배우기 시작했습니다.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)과 같은 것을 사용하여 광고를 보았습니다. 그것은 이전에 게시 한 코드와 전혀 같지 않습니다.

그래서 현재 이해하고있는 것처럼 GtkApplication 또는 gtk_init()을 사용하여 GTK 응용 프로그램을 작성하는 여러 가지 방법이 있습니다. 그 중 하나가 구형이며 더 이상 선호되지 않는가? 그렇다면 어떤 것이 선호되거나 선호되어야 하는가? 나는 공식는 GTK 튜토리얼에서 볼 수있는 두 가지 방법에

몇 가지 링크 :

답변

7

이제는 GtkApplication을 사용하는 것이 새로운 응용 프로그램에 대해 선호되는 방법입니다. 이전 코드는 gtk_initgtk_main을 수동으로 호출합니다.

+1

충분하지만 GtkApplication을 GtkBuilder와 함께 사용하려면 어떻게해야합니까? – Zyphicx

+1

이것은 동일한 페이지에 설명되어 있습니다 : GtkBuilder UI 파일을 생성하고, GResource 파일을 생성하고 (선택 사항이지만 더 깔끔하고 응용 프로그램 배포가 용이함), 리소스를 컴파일하고, gtk_widget_class_set_from_template을 호출하여 UI 위치를 전달하십시오 의지. 이것은 [ "창 채우기"] (https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.) 섹션에서 설명합니다. – liberforce

관련 문제