2010-08-18 3 views
7

Я пытаюсь сделать простое приложение с поляной/gtk/vala. До сих пор у меня есть это:Как использовать gtk/glade в vala

using Gtk; 
class HelloWorldApp : GLib.Object { 
    const string UI = "test.glade"; 
    public Window main_window; 

    [CCode (instance_pos = -1)] 
    public void on_btn_hello_clicked(Button source) { 
    stdout.printf("Hello, world"); 
    } 

    construct { 
     Builder builder = new Builder(); 
     builder.add_from_file(UI); 
     main_window = builder.get_object("window1") as Window; 
     main_window.destroy.connect(Gtk.main_quit); 
     builder.connect_signals(this); 
    } 
} 

class HelloWorld : GLib.Object { 
    public static int main(string[] args) { 
     Gtk.init (ref args); 
     HelloWorldApp h = new HelloWorldApp(); 
     h.main_window.show_all(); 
     Gtk.main(); 
     return 0; 
    } 
} 

При запуске этого выхода: (HelloWorld: 22641): Gtk-WARNING **: Не удалось найти обработчик сигнала «on_btn_hello_clicked» , но в остальном работает нормально, кроме обработчика не называется

Что я делаю неправильно?

+0

Существует хороший inrtoductory учебник о том, как писать GUI-приложения с поляной и Вал над по адресу: // demonicode .ghoster.io/how-to-write-a-gui-app-with-glade-interface-designer-and-vala/- проверить это, это на самом деле очень просто! Я застрял на этом в течение нескольких месяцев, пока не нашел этот урок :( – uSeRnAmEhAhAhAhAhA

ответ

10

Вы делаете один или несколько из следующих трех вещей неправильно:

  1. При компиляции программы с помощью Gtk.Builder, вы должны добавить --pkg gmodule-2.0 к вашей valac командной строки. (link)
  2. Когда вы размещаете обработчики сигналов внутри класса и/или пространства имен, вы должны добавить имя класса и/или имени пространства имен обработчика в Glade, поэтому вы должны подключаться к hello_world_app_on_btn_hello_clicked. (link)
  3. Если вы находитесь в Windows, вы также должны добавить [CCode (cname="G_MODULE_EXPORT on_btn_hello_clicked")]. (link)
+0

Спасибо, я забыл про # 2! – mat

+0

Очень хорошая информация в этом, +1 – uSeRnAmEhAhAhAhAhA

Смежные вопросы