如何在 vala 中使用 gtk/glade

Posted

技术标签:

【中文标题】如何在 vala 中使用 gtk/glade【英文标题】:How to use gtk/glade in vala 【发布时间】:2011-03-31 12:39:04 【问题描述】:

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

我做错了什么?

【问题讨论】:

demonicode.ghoster.io/… 上有一个关于如何使用 Glade 和 Vala 编写 GUI 应用程序的很好的入门教程 - 看看,它实际上非常简单!在找到本教程之前,我被困了几个月:( 【参考方案1】:

你做错了以下三件事中的一件或多件:

    当您使用Gtk.Builder 编译程序时,您必须将--pkg gmodule-2.0 添加到您的valac 命令行。 (link) 当您将信号处理程序放在类和/或命名空间中时,您必须将类和/或命名空间名称添加到 Glade 中的处理程序名称中,因此您应该连接到 hello_world_app_on_btn_hello_clicked。 (link) 如果您使用的是 Windows,还必须添加 [CCode (cname="G_MODULE_EXPORT on_btn_hello_clicked")]。 (link)

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于如何在 vala 中使用 gtk/glade的主要内容,如果未能解决你的问题,请参考以下文章

Gtk+/Glade编程--简介

Go版GTK:glade

GTK Glade C - Treeview选择奇怪的段错误

PyGTK和GTK+/Glade进口

基本glade文件加载

如何在 Vala 中使用 Qt GUI?