如何在vala中使用gtk / glade

时间:2010-08-18 12:13:46

标签: 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;
    }
}

当我运行它时输出:     (helloworld:22641):Gtk-WARNING **:找不到信号处理程序'on_btn_hello_clicked' 但除了被称为

的处理程序之外,其他方面运行良好

我做错了什么?

2 个答案:

答案 0 :(得分:11)

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

  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)

答案 1 :(得分:1)

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