如何在vala使用gtk/glade

如何在vala使用gtk/glade,gtk,glade,vala,Gtk,Glade,Vala,我正在尝试用glade/gtk/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) { std

我正在尝试用glade/gtk/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警告**:在单击“你好”时找不到信号处理程序 但除未调用处理程序外,其他情况下运行良好


我做错了什么?

您做错了以下三件事中的一件或多件:

  • 使用
    Gtk.Builder
    编译程序时,必须将
    --pkg gmodule-2.0
    添加到
    valac
    命令行
  • 当您将信号处理程序放置在类和/或命名空间中时,您必须将类和/或命名空间名称添加到Glade中的处理程序名称中,因此您应该连接到\u btn\u hello\u上的
    hello\u world\u app\u
    
  • 如果您使用的是Windows,您还必须添加
    [CCode(cname=“G_MODULE_EXPORT on\u btn\u hello\u clicked”)]

    live.gnome.org上有所有这些信息,包括Windows的怪癖:

    有一个很好的入门教程,介绍如何使用Glade和Vala编写GUI应用程序-看看吧,其实很简单!在我找到本教程之前,我在这方面已经坚持了几个月:(