GTK_OBJECT не был объявлен в этой области при попытке перейти на GTK3 (скомпилировать с библиотекой gtk + -3.0) - PullRequest
0 голосов
/ 15 мая 2019

Я начинаю с разработки GTK, и я изо всех сил.

Это первое приложение заняло у меня 4 часа, я хотел бы знать сейчас, если я уже делаю слишком много очевидных ошибок?

В основном я хочу спросить, как мне перевести этот код на GTK3?Это дает мне ошибку:

 ‘GTK_OBJECT’ was not declared in this scope

Если я пытаюсь скомпилировать против GTK3 вместо GTK2, то есть:

pkg-config --cflags --libs gtk+-3.0

#include <gtk/gtk.h>
static int click_counter = 0;
void greet ( GtkWidget * widget, gpointer data )
{
    g_print ( "My first GTK app!\n" );
    g_print ( "%s clicked %d times\n", (char*) data, ++click_counter );
}
void destroy ( GtkWidget * widget, gpointer data )
{
    gtk_main_quit ();
}
int main ( int argc, char * argv[] )
{
    GtkWidget * main_window;
    GtkWidget * counter_button;
    gtk_init( & argc, & argv);
    main_window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    g_signal_connect (main_window, "destroy", G_CALLBACK (destroy), NULL);
    gtk_container_set_border_width ( GTK_CONTAINER ( main_window ), 30 );
    counter_button = gtk_button_new_with_label ("Click me!");
    g_signal_connect ( GTK_OBJECT(counter_button), "clicked", G_CALLBACK (greet), NULL ); // last param counter_button ?
    gtk_container_add ( GTK_CONTAINER (main_window), counter_button );
    gtk_widget_show_all ( main_window );
    gtk_main ();
    return 0;
}

Я компилирую, используя Makefile, основная часть:

CXX := g++-8
CXXFLAGS := -std=c++17 -Wall -Wextra -Wc++11-compat # -Werror -Wpedantic -pedantic-errors
LDLIBS := $$( pkg-config --cflags --libs gtk+-2.0 )

PROJECT := firstGTK
BINARY := $(PROJECT)
SOURCE := $(PROJECT).cpp


$(BINARY): $(SOURCE)
    $(CXX) $(CXXFLAGS) $(SOURCE) -o $(BINARY) $(LDLIBS)

1 Ответ

1 голос
/ 16 мая 2019

Если вы переносите код GTK 2 на GTK 3, прочитайте руководство по миграции GTK 2 на 3 . Следует ожидать, что некоторые изменения в коде будут необходимы при переключении.

Существует раздел , в котором конкретно говорится о том, как заменить GtkObject. Ответ в большинстве случаев - использовать GObject или GtkWidget.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...