我用林间空地制作界面。效果很好。 我写了一个小的主要函数,它调用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实例化。
我只是不明白。帮助
答案 0 :(得分:4)
你不会错过一些明显的东西。似乎gtkmm没有提供gtk_builder_connect_signals()
函数的C ++版本,这就是你在C中的表现。我已经做了一些谷歌搜索,但我无法弄清楚为什么他们会离开它进行。
您可以直接访问C函数:
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow");
gtk_builder_connect_signals(builder->gobj(), callback_data);
答案 1 :(得分:3)
你应该使用你自己的按钮类:
#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的Core类中):
MyButton *sf;
refBuilder_->get_widget_derived("button", sf);
我在几个月前在官方gtkmm manual找到了这个,并在我的GUI应用程序中成功使用它。
我希望这会有所帮助。