tly*_*tly 6 c++ gtkmm gtk3 msys2 gtkmm3
该GtkOverlay小部件有一个特殊的set_overlay_pass_through方法将输入传递到底层覆盖层。我想使用此功能GtkDrawingArea在 UI 上叠加来添加绘图。不幸的是,它对我不起作用,没有输入事件被传递。
我正在使用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);
Run Code Online (Sandbox Code Playgroud)
当我更改两个add_overlay调用的顺序时,输入事件正常工作,但nodeBox隐藏绘图区域的小部件。
DrawingArea捕获事件,因为它有Gdk::Window。
与其他比较:
这是一组缺少物理窗口的实用小部件的抽象。它们在其定义的空间内确实有对齐和填充。
如果没有窗口,这种类型的小部件就无法捕获事件。
为了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);
});
Run Code Online (Sandbox Code Playgroud)
注意,你仍然需要调用set_overlay_pass_through并且widget必须被实现。
| 归档时间: |
|
| 查看次数: |
1054 次 |
| 最近记录: |