如何在GtkMM中为自定义Widget添加ScrolledWindow支持?

时间:2010-02-01 20:27:14

标签: gtk signals gtkmm adjustment scrolledwindow

我正在为Gtkmm编写一个自定义小部件,它应该显示一个巨大的数据集(想象一下像4096x256字符数据表)。

主要是出于优雅的原因,也是为了在Glade / Gtk-Builder编辑器中使用,我希望这个小部件本身支持ScrolledWindow,也就是说,一旦将它设置为ScrolledWindow的子节点,它就会被识别为一个可滚动的小部件,允许在其上设置水平和垂直调整对象,随后可以篡改它。

似乎这样做,我需要在我的小部件的构造函数中执行类似的操作:

// get Gtk C type from wrapper class
GtkWidget* gwidget = this->gobj();

// imagine code here that magically creates a gobject signal, 
// that we can catch in C++.
// this is actually the part which I don't know how to do.
guint my_signal = magic_way_to_create_this_signal(
                   &MyClass::rainbow_unicorn_signal_handler);

// make ScrolledWindow recognize this window as scrollable
GTK_WIDGET_GET_CLASS(gwidget)->set_scroll_adjustments_signal = my_signal;

稍后,添加小部件时ScrolledWindow发出的信号需要通过信号代理方法或其他方式被我的Widget捕获?我不知道。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

magic_way_to_create_this_signal”是g_signal_new()。您可以在小部件的my_widget_class_init()函数中调用它,这是GObject定义类的一种方式。我不确定Gtkmm中的等价物是什么。

另请参阅GTK文档中的footnote,其中解释了为什么使小部件本机可滚动是如此麻烦。

您还可以将小部件放入Gtk::Viewport,为其子小部件添加滚动功能。