Gtk+ で 1 つのウィジェットを別のウィジェットの上に積み重ねる方法はありますか? GtkFixed を数えませんか? GtkFixed は 2 つの理由でうまく機能しません: 1) Z オーダーが必要であり、2) 提供されたスペースを拡大して埋めるために 1 つのウィジェットが必要です。
3 に答える
私は Gtk::Fixed (実際には gtk.Fixed -- pygtk -- を使用してこの正確な問題を抱えていましたが、下はすべて同じだと思います)、各ウィジェットのウィンドウを操作することで非常に簡単に処理できました。
私の場合、ウィジェットはすでに EventBox インスタンスであり、ドラッグしていたウィジェットが一番上にあることを確認する必要がありました。解決策は、ウィジェットがクリックされてドラッグが開始されたときに、「widget.window.raise_()」を呼び出して、ウィジェットの下にあるウィンドウを上げるという単純なものでした。
つまり、基本的には前の回答が機能することを再確認しているだけですが、実際には非常に簡単であることを指摘したかった. ウィジェットを保持するためにいくつかの EventBoxes を作成する必要があるように思えますが、その後は機能するはずです。
私が取り組んでいたコードはhttp://github.com/divegeek/BlockHeadで見ることができます
標準のGTKには適切なコンテナがないと思います。私はGtk::Fixedをサブクラス化します...それはまだあなたが得ることができる最も近いものです、そしてあなたがgtkmmを使うなら、サブクラス化はそれほど難しいことではないはずです¹。次に、すべてのウィジェットのサイズを制御して、選択した1つの子をストレッチしてスペースを埋めることができます。
Z軸を制御するには、ウィジェットのXウィンドウを操作する必要があります。GDKウィンドウ²のトピックに関するGDKのドキュメントを確認してください。PyGTKでは各ウィジェットにgtk.Widget.windowプロパティがあることを覚えていますが、gtkmmについても同じだと思います。これは、すべての子ウィジェットにXウィンドウがあることを前提としているため、Gtk::LabelをGtk::EventBox内にラップする必要があります。
¹http ://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-customwidgets.html
私はまさにそれを行うことができました-
1 つのウィジェットをスペース全体に表示し、次に別のウィジェットを固定位置の上に表示します。両方が同時に表示されます。
gtk2 では、GtkFixed を使用して適切な挿入順序 (最初に挿入 - 下、最後に挿入 - 上) を作成し、そして -最も重要なことに!! - GtkFixed に独自のウィンドウを持たせる:
`f := gtk_fixed_new();
gtk_widget_set_has_window(f, 1);`
set_has_window(f, 1) を実行しないと、すべての子ウィンドウが親のウィジェット/ウィンドウに挿入され (gtkfixed.c の gtk_fixed_realize() を参照)、z オーダーが混乱する可能性があります。