我缺少GLADE GTKBUILDER和连接信号的明显内容。帮助?
-
29-09-2019 - |
题
我与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应用程序中成功使用了它。
我希望这有帮助。
不隶属于 StackOverflow