GtkOverlay
виджет имеет специальный 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
звонки, события ввода работают нормально, но виджет nodeBox
скрыть область рисования.
DrawingArea фиксирует события, потому что имеет Gdk :: Window.
Сравнить с Разное:
Это резюме для набора служебных виджетов, в которых отсутствует физическое окно. У них есть выравнивание и отступы в пределах их определенного пространства.
Без окна виджеты этого типа не могут захватывать события.
За set_overlay_pass_through
для работы нужно использовать этикетка, Стрела, Образ или вручную установите 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
и виджет должен быть понял.
Других решений пока нет …