2016-12-20 4 views
1

GtkOverlayウィジェットには、入力を基礎となるオーバーレイに渡す特別なset_overlay_pass_throughメソッドがあります。この機能を使用してUI上にGtkDrawingAreaをオーバーレイして図面を追加したいとします。残念ながら、それは私のためには機能しません、入力イベントは通過しません。GtkOverlayが入力イベントを通過しない

Im msys2およびgtkmmを使用しています。私は2つの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

DrawingAreaは、Gdk::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については

は、あなたがイベントを渡すため LabelArrowImageまたは手動で設定したGdk ::ウィンドウを使用する必要が動作するように。

関連する問題