我正在开始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)
答案 0 :(得分:1)
如果要将GTK 2代码移植到GTK 3,则应阅读GTK 2 to 3 migration guide。可以预料,切换时将有必要对代码进行一些更改。
有一个section专门讨论如何替换GtkObject。答案是,在大多数情况下,使用GObject或GtkWidget。