I';我在glade gtkbuilder和连接信号上遗漏了一些明显的东西。帮忙?

I';我在glade gtkbuilder和连接信号上遗漏了一些明显的东西。帮忙?,gtk,glade,gtkmm,gtkbuilder,Gtk,Glade,Gtkmm,Gtkbuilder,我与glade建立了接口。效果很好。 我编写了一个小的主函数,它调用gtkbuilder并呈现glade文件中的所有内容 Gtk::Main kit(num, opts); // Load the GtkBuilder file and instantiate its widgets: Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow"); 现在怎

我与glade建立了接口。效果很好。 我编写了一个小的主函数,它调用gtkbuilder并呈现glade文件中的所有内容

Gtk::Main kit(num, opts);
// Load the GtkBuilder file and instantiate its widgets:
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow");
现在怎么办?我发现的每个连接信号处理程序的示例都不是由gtkbuilder构建的。如果您实例化自己的类来表示/处理/呈现按钮,那么很容易将信号处理程序连接到它,但是我使用的是gtkbuilder,我不知道如何编写一个可以附加到我的小部件的函数,因为我不是创建按钮对象的人,gtkbuilder是

我是否让gtkbutton的子类编写我的函数,然后指向它?但是我的类没有被gtkbuilder实例化


我就是不明白。帮助?

你没有遗漏一些明显的东西。似乎GTKMM没有提供一个C++版本的<代码> GtkBuxDeLoMyCelpTySysSalm()/<代码>函数,这是C语言中的方法。我做了一点谷歌搜索,但我不知道为什么会把它排除在外。 您可以像这样直接访问C函数:

Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow");
gtk_builder_connect_signals(builder->gobj(), callback_data);
#ifndef _MYBUTTON_H_
#define _MYBUTTON_H_

#include <gtkmm.h>
class MyButton : public Gtk::Button { 
  public:
    inline MyButton(BaseObjectType* cobject) : Gtk::Button(cobject) {};
  protected:
    // overwrite virtual void on_pressed() function of Gtk::Button
    void on_pressed() { /* do something */ };
};
#endif
Glib::RefPtr builder=Gtk::builder::从_文件(“dsg.glade”、“主窗口”)创建_; gtk_builder_connect_信号(builder->gobj(),回调_数据);
您应该像这样使用自己的按钮类:

Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow");
gtk_builder_connect_signals(builder->gobj(), callback_data);
#ifndef _MYBUTTON_H_
#define _MYBUTTON_H_

#include <gtkmm.h>
class MyButton : public Gtk::Button { 
  public:
    inline MyButton(BaseObjectType* cobject) : Gtk::Button(cobject) {};
  protected:
    // overwrite virtual void on_pressed() function of Gtk::Button
    void on_pressed() { /* do something */ };
};
#endif
几个月前,我在官方网站上找到了它,并在我的GUI应用程序中成功地使用了它


我希望这能有所帮助。

谢谢。很高兴知道我没有发疯。似乎你要做的是将它连接到一个独立的函数,就像在一个不属于类的函数中一样。我明白为什么把它附加到一个类会是个问题,实际上这是我所遇到的问题,你没有得到回调的对象的源代码。我想让它绑定到C++函数将是PIA。我想我可以调用gtk_builder_connect_signals(),如果我将所有信号处理程序都外部化为“C”{}@stu,那是真的。恼人的是,不同的C++编译器不会以相同的方式来修改他们的名字……链接不再工作。