dirname `readlink -f $0`
窗口小部件有一个特殊的GtkOverlay
方法,用于将输入传递到基础叠加层。我想使用此功能在UI上覆盖set_overlay_pass_through
以添加绘图。不幸的是,它对我不起作用,没有输入事件通过。
我正在使用GtkDrawingArea
和msys2
。
这是我的代码:
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
的小部件隐藏了绘图区域。
答案 0 :(得分:0)
DrawingArea会捕获事件,因为它有Gdk::Window。
与Misc比较:
这是一组缺少物理窗口的实用工具小部件的摘要。它们在定义的空间内确实有对齐和填充。
如果没有窗口,此类小部件无法捕获事件。
要让set_overlay_pass_through
工作,您需要使用Label,Arrow,Image或手动设置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。