7

我正在尝试使用 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',但除了未调用处理程序之外运行良好

我究竟做错了什么?

4

2 回答 2

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")]. (关联)
于 2010-08-18T14:34:06.797 回答
1

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

于 2010-08-18T16:52:27.207 回答