GtkOverlay不通过输入事件

时间:2016-12-20 20:02:25

标签: c++ gtk3 gtkmm msys2 gtkmm3

dirname `readlink -f $0` 窗口小部件有一个特殊的GtkOverlay方法,用于将输入传递到基础叠加层。我想使用此功能在UI上覆盖set_overlay_pass_through以添加绘图。不幸的是,它对我不起作用,没有输入事件通过。

我正在使用GtkDrawingAreamsys2

这是我的代码:

gtkmm

当我更改两个Gtk::DrawingArea drawingArea; Gtk::Fixed nodeBox; //filled with several widgets Gtk::Overlay overlay; overlay.add_overlay(nodeBox); overlay.add_overlay(drawingArea); overlay.set_overlay_pass_through(drawingArea,true); window.add(overlay); 调用的顺序时,输入事件正常工作,但add_overlay的小部件隐藏了绘图区域。

1 个答案:

答案 0 :(得分:0)

DrawingArea会捕获事件,因为它有Gdk::Window

Misc比较:

  

这是一组缺少物理窗口的实用工具小部件的摘要。它们在定义的空间内确实有对齐和填充。

     

如果没有窗口,此类小部件无法捕获事件。

要让set_overlay_pass_through工作,您需要使用LabelArrowImage或手动设置Gdk :: Window来传递事件:

overlay.set_overlay_pass_through(drawingArea,true);
drawingArea.signal_realize().connect([&]
{
    auto gdkWindow = drawingArea.get_window();
    gdkWindow->set_pass_through(true);
});

请注意,您仍需要致电set_overlay_pass_through,小部件必须为realized