我与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");

工作更好。那我得到了我的小部件

Gtk::Button *sf = 0;
builder->get_widget("button", sf);

怎么办?我发现连接信号处理程序的每个示例不是GTKBuilder构建的。如果您实例化自己的类以表示/句柄/渲染按钮,则很容易将信号处理程序连接到它,但是我正在使用GTKBuilder,我看不到如何编写我可以将其附加到窗口小部件的函数,由于我不是创建按钮对象的人,因此gtkbuilder是。

我会做一个gtkbutton的子类写我的功能,然后指向这一点?但是我的班级没有被GTKBuilder实例化。

我只是不明白。帮助?

有帮助吗?

解决方案

您不会错过明显的东西。似乎GTKMM不提供C ++版本 gtk_builder_connect_signals() 功能,这就是您在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

现在在您的主要代码中的某个地方(我将其放在GTK :: window的公共核心类中):

MyButton *sf;
refBuilder_->get_widget_derived("button", sf);

我在官员中发现了这一点 GTKMM手册 几个月前,在我的GUI应用程序中成功使用了它。

我希望这有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top