gtkoverlay不会通过输入事件



GtkOverlay小部件具有一种特殊的set_overlay_pass_through方法,可以将输入传递到基础覆盖层。我想使用此功能将GtkDrawingArea叠加在UI上以添加图纸。不幸的是,它对我不起作用,没有输入事件。

我使用msys2gtkmm

这是我的代码:

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调用的顺序时,输入事件正常工作,但是nodeBox的小部件隐藏了绘图区域。

drawdarea捕获事件,因为它具有gdk :: window。

与MISC进行比较:

这是缺少物理窗口的一组实用程序小部件的抽象。他们确实在定义的空间内有对齐和填充。

没有窗口,这种类型的小部件无法捕获事件。

对于set_overlay_pass_through,您需要使用标签,箭头,图像或手动设置GDK ::窗口传递事件:

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,并且必须实现小部件。

相关内容

  • 没有找到相关文章

最新更新