2016-07-24 21 views
0

Ich schrieb kleine GTK + Anwendung auf C++, die für mich auf Debian x64 mit Gnome 3 funktioniert. Es funktioniert jedoch nicht auf Lubuntu x86. Also habe ich ein Testprogramm geschrieben, das ein Fenster mit einigen Widgets aus meiner gui.glade-Datei erstellt, und es funktioniert auch nicht auf Lubuntu, sondern auf Debian. Hier geht Testcode:GTK + 3 Anwendungen basierend auf .glade Datei auf verschiedenen OS

#include <gtk/gtk.h> 

void create_window() 
{ 
    GtkBuilder *builder; 
    builder = gtk_builder_new(); 

    gtk_builder_add_from_file (builder, "src/gui.glade", NULL); 
    gtk_builder_connect_signals (builder, NULL); 

    GtkWidget *window; 
    window = GTK_WIDGET (gtk_builder_get_object (builder, "window")); 

    gtk_window_set_title (GTK_WINDOW (window), "Startup Settings"); 
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); 

    gtk_widget_show (window); 
} 

int main (int argc, char *argv[]) 
{ 
    gtk_init (&argc, &argv); 
    create_window(); 

    gtk_main(); 
} 

ich kompilieren es mit g ++:

g++ -std=c++11 `pkg-config --cflags gtk+-3.0` test.cpp -rdynamic `pkg-config --libs gtk+-3.0` 

Ausgang Fehler:

** (a.out:17864): WARNING **: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files 

(a.out:17864): Gtk-CRITICAL **: gtk_window_set_title: assertion 'GTK_IS_WINDOW (window)' failed 

(a.out:17864): GLib-GObject-WARNING **: invalid (NULL) pointer instance 

(a.out:17864): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed 

(a.out:17864): Gtk-CRITICAL **: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' faile 

Sie können herunterladen gui.glade here.

+1

Überprüfen Sie Ihre Fehler (letztes Argument von 'gtk_builder_add_from_file()'). – andlabs

+0

@andlabs, wie bekomme ich eine Fehlermeldung oder einen Code? Es ist ein Fehler aufgetreten ('gtk_builder_add_from_file: assertion 'error == NULL || * error == null' fehlgeschlagen'), aber ich kann' g_print (error-> message) nicht ', es verursacht Segmentierungsfehler. – hant0508

Antwort

0

Ich habe gerade meine gui.glade Dateieigenschaften geöffnet und das Problem wurde offensichtlich. Standardmäßig benötigt Glade die neueste Version von GTK +, die auf Ihrem Computer installiert ist. Ich benutze Debian Unstable, also ist es für mich GTK 3.20. Als ich es auf einem stabilen System getestet habe, funktionierte es nicht, da GTK 3.18 auf dem System installiert war.

Um das Problem zu lösen, habe ich meine gui.glade Eigenschaften über Glage geändert und die erforderliche GTK-Version auf 3.10 reduziert.