GtkOverlay не проходит через входные события

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 скрыть область рисования.

1

Решение

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 и виджет должен быть понял.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]