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 **: Could not find signal handler 'on_btn_hello_clicked' but それ以外の場合は、ハンドラーが呼び出されていないことを除いて正常に実行されます

私は何を間違っていますか?

4

2 に答える 2

11

次の 3 つのことの 1 つまたは複数を間違っています。

  1. を使用してプログラムをコンパイルするときは、コマンド ラインGtk.Builderに追加--pkg gmodule-2.0する必要があります。(リンク)valac
  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 に答える