2016-12-20 8 views
1

GtkOverlay 위젯에는 입력을 기본 오버레이로 전달하는 특별한 set_overlay_pass_through 메소드가 있습니다. 이 기능을 사용하여 UI에 GtkDrawingArea을 오버레이하여 도면을 추가하고 싶습니다. 불행히도, 그것은 나를 위해 작동하지 않습니다, 입력 이벤트가 전달됩니다.GtkOverlay가 입력 이벤트를 거치지 않음

im msys2gtkmm을 사용하는 Im. 나는 두 add_overlay 호출의 순서를 변경하면, 이벤트가 정상적으로 작동 입력하지만 nodeBox의 위젯이 도면 영역을 숨길

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); 

:

이 내 코드입니다.

+0

이미지를 추가하거나 사용자가 UI를 통해 쓸어 넘기를 원하십니까? –

답변

0

DrawingAreaGdk::Window이므로 이벤트를 캡처합니다.

Misc와 비교 :

이 물리적 창 부족 유틸리티 위젯 세트에 대한 추상적이다. 정의 된 공간 내에 정렬 및 패딩이 있습니다.

창없이이 유형의 위젯은 이벤트를 캡처 할 수 없습니다. realized을해야합니다 당신은 여전히 ​​set_overlay_pass_through 및 위젯을 호출 할 필요가

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를 들어

는 이벤트를 통과 Label, Arrow, Image 또는 수동으로 설정 GDK :: 윈도우를 사용할 필요가 작동하려면 .