Как использовать GTK / Glade в Вала - PullRequest
7 голосов
/ 18 августа 2010

Я пытаюсь сделать простое приложение с 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 ]

11 голосов
/ 18 августа 2010

Вы делаете одно или несколько из следующих трех действий неправильно:

  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")]. (ссылка)
1 голос
/ 18 августа 2010

live.gnome.org содержит всю эту информацию, включая причуды Windows: http://live.gnome.org/Vala/GTKSample#Loading_User_Interface_from_XML_File

...