如何在vala中使用gtk/glade

mat*_*mat 7 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) {
    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;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时输出:(helloworld:22641):Gtk-WARNING**:无法找到信号处理程序'on_btn_hello_clicked'但是除了未被调用的处理程序之外还运行良好

我究竟做错了什么?

pto*_*ato 11

你正在做以下三件事中的一件或多件:

  1. 使用时编译程序时Gtk.Builder,必须添加--pkg gmodule-2.0valac命令行.(链接)
  2. 将信号处理程序放在类和/或命名空间中时,必须将类和/或命名空间名称添加到Glade中的处理程序名称,因此您应该连接到hello_world_app_on_btn_hello_clicked.(链接)
  3. 如果您使用的是Windows,则还必须添加[CCode (cname="G_MODULE_EXPORT on_btn_hello_clicked")].(链接)