2016-07-24 48 views
0

我在C++上編寫了一個小型的GTK +應用程序,可以在Debian x64上使用Gnome 3正常工作。但是,它在Lubuntu x86上不起作用。所以我編寫了一個測試程序,它可以創建窗口,其中包含我的gui.glade文件中的一些小部件,但它在Lubuntu上不起作用,但適用於Debian。這裏去測試代碼:基於不同操作系統上的.glade文件的GTK + 3應用程序

#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(); 
} 

我使用g ++編譯:

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

錯誤輸出:

** (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 

您可以下載gui.glade here

+1

檢查你的錯誤('gtk_builder_add_from_file()'的最後一個參數))。 – andlabs

+0

@andlabs,如何獲取錯誤消息或代碼?發生錯誤('gtk_builder_add_from_file:assertion'錯誤== NULL || * error == null'failed'),但我不能'g_print(error-> message)',它會導致分段錯誤。 – hant0508

回答

0

我剛剛打開了我的gui.glade文件屬性,問題變得明顯。默認情況下,Glade需要在您的計算機上安裝最新版本的GTK +。我使用Debian不穩定,所以對我來說,它是GTK 3.20。當我在穩定的系統上測試它時,它不起作用,因爲它上面安裝了GTK 3.18。

要解決這個問題,我已經通過Glage更改了我的gui.glade屬性,並將所需的GTK版本降低到了3.10。

相關問題