如何在vala中使用gtk/glade

问题描述:

我试图用glade/gtk/vala制作一个简单的应用程序。到目前为止,我有这样的:如何在vala中使用gtk/glade

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

有关于如何通过访问http写格莱德和瓦拉GUI应用程序的好inrtoductory教程:// demonicode .ghoster.io/how-to-write-a-gui-app-with-glade-interface-designer-and-vala/- 检查一下,其实很简单!我被困在这个好几个月,直到我发现这个教程:( – uSeRnAmEhAhAhAhAhA 2013-12-02 08:50:29

你正在做以下三件事情错了一个或多个:

  1. 当你编译使用Gtk.Builder程序,您必须添加--pkg gmodule-2.0valac命令行。 (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 2010-08-19 14:09:54

+0

非常好的信息在这,+1 – uSeRnAmEhAhAhAhAhA 2013-12-02 08:51:46

的live.gnome.org拥有所有这些信息,包括Windows怪癖:http://live.gnome.org/Vala/GTKSample#Loading_User_Interface_from_XML_File