2010-08-18 14 views
7

glade/gtk/vala ile basit bir uygulama yapmaya çalışıyorum. Şimdiye kadar bu var:Valada gtk/glade nasıl kullanılır

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; 
    } 
} 

Bu da çıkışlarını çalıştırdığınızda: (helloworld: 22641): Gtk UYARI **: sinyal işleyici bulunamadı 'on_btn_hello_clicked' ama aksi işleyicisi dışında gayet çalışır

Neyi yanlış yapıyorum?

+0

http Glade ve Vala ile GUI uygulamaları üzerinde yazma konusunda iyi bir inrtoductory öğretici vardır: // demonicode .ghoster.io/nasıl-yazmak-a-gui-app-ile-glade-arayüzü-tasarımcı-ve-vala/- kontrol edin, aslında çok basit! Bu dersi bulana kadar aylardır takıldım :( – uSeRnAmEhAhAhAhAhA

cevap

10

Yanlış aşağıdaki üç şeyden birini veya daha fazlasını yapıyoruz: Eğer Gtk.Builder kullanarak bir programı derlerken

  1. , kendi valac komut satırına --pkg gmodule-2.0 eklemek zorunda.
  2. bir sınıf ve/veya isim alanı içinde sinyal işleyici yerleştirmek (link), Glade'de işleyici isme sınıf ve/veya ad alanı adı eklemek için var, yani hello_world_app_on_btn_hello_clicked bağlanırken edilmelidir. (link)
  3. Windows kullanıyorsanız, [CCode (cname="G_MODULE_EXPORT on_btn_hello_clicked")]'u da eklemeniz gerekir. (link)
+0

Teşekkürler, # 2'yi unuttum! – mat

+0

Bu konuda çok iyi bilgi, +1 – uSeRnAmEhAhAhAhAhA