Как использовать 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' но в остальном работает нормально, если не вызывать обработчик

Что я делаю не так?

7
задан mat 18 August 2010 в 12:13
поделиться

2 ответа

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

  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")] . (ссылка)
11
ответ дан 6 December 2019 в 21:08
поделиться

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

1
ответ дан 6 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: