如何在 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的主要内容,如果未能解决你的问题,请参考以下文章