GTKmm的可缩放图像查看器

GTKmm的可缩放图像查看器,gtk,gtkmm,gtk3,Gtk,Gtkmm,Gtk3,我需要一个简单的图像查看器小部件来显示一个Pixbuf,具有可以使用滚轮更改的缩放因子(仅限整数因子,最近邻插值),放大应该调整滚动位置,以便当前中心或鼠标位置将是原点。单击并拖动鼠标应相应地移动曲面;基本上是eog或evince所做的 曾经有一个GTK2的外部gtk图像查看器组件,但我没有找到其他任何东西 所以我尝试实现我自己的,这就是我取得的成就: struct ZoomableImage : public Gtk::Scrollable, public Gtk::DrawingArea {

我需要一个简单的图像查看器小部件来显示一个Pixbuf,具有可以使用滚轮更改的缩放因子(仅限整数因子,最近邻插值),放大应该调整滚动位置,以便当前中心或鼠标位置将是原点。单击并拖动鼠标应相应地移动曲面;基本上是
eog
evince
所做的

曾经有一个GTK2的外部gtk图像查看器组件,但我没有找到其他任何东西

所以我尝试实现我自己的,这就是我取得的成就:

struct ZoomableImage : public Gtk::Scrollable, public Gtk::DrawingArea {
    ZoomableImage() {
        auto h = get_hadjustment();
    }
};
这导致了一个警告

gtk_scrollable_get_hadjustment: assertion `GTK_IS_SCROLLABLE (scrollable)' failed
我找不到任何关于如何在GTKmm中继承接口的适当文档,这些头文件隐藏了一个来自doxygen的构造函数,该构造函数应该由基类的
init()
函数的结果调用?!一些示例初始化Glib::ObjectBase(typeid(ZoomableImage)),这只会增加更多错误

(我的想法是将我的缩放图像放在一个滚动窗口中,该窗口应为我提供H/V调整,这些调整范围从0到图像的实际高度/宽度,在绘图上的
,我将读取调整值,应用缩放因子并相应地绘制Pixbuf。这有意义吗?)