Gtk +でのスタッキングウィジェット
-
21-08-2019 - |
質問
他の上に1つのウィジェットを積み重ねるためにはGtk +での方法はありますか? GtkFixedは、二つの理由でうまく動作しません:1)私はZオーダーを必要とし、2)私はストレッチや提供のスペースを埋めるために1つのウィジェットを必要とする
解決
私は、標準的なGTKでの適切なコンテナがあるとは思いません。私は::それはまだあなたが得ることができる最も近いものである、とあなたはgtkmmのを使用するならば、サブクラス化は非常にdifficult¹すべきではない...固定のGtkをサブクラス化します。その後、スペースを埋めるために一つの選択された子を伸ばし、すべてのウィジェットの大きさを制御することができます。
Z軸を制御するために、あなたはおそらく、ウィジェットのXウィンドウを操作する必要があります - GDKのwindows²のトピックに関するGDKのマニュアルを参照してください。私は、各ウィジェットはgtk.Widget.window性を有してはPyGTKで、私は同じことがgtkmmのためのものであることを推測することを覚えておいてください。これは、すべてのあなたの子供のウィジェットがXウィンドウを持っていることを前提とし、そうf.e.あなたがのGtk ::イベントボックス内のGtk ::ラベルをラップする必要があります。
¹のhttp:// WWW。 gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-customwidgets.htmlする
他のヒント
私はのGtk ::固定使用して、この正確な問題でした( - PyGTKを - 実際にgtk.Fixedを私はそれがすべて下に同じだと思う)、私は、各ウィジェットのウィンドウを操作することによって、非常に簡単にそれを処理することができました。。 P>
は、私の場合、ウィジェットは、すでにイベントボックスのインスタンスであり、そうでなければ、それは非常に間違って見て他の人、下にスライドさせるので、私はちょうど、私の周りにドラッグしたものが上だったことを確認する必要がありました。解決策は、ウィジェットがドラッグを開始するためにクリックされたとき、ウィジェットの基になるウィンドウを高めるため「widget.window.raise_()」を呼び出すよう簡単だった。
だから私は基本的にはちょうど前の回答が動作することを再確認していますが、私はそれが実際にはかなり簡単だということを指摘したかったです。それはあなたがあなたのウィジェットを保持するために、いくつかのEventBoxesを作成する必要がありますように聞こえるが、それの後に、それだけで動作するはずです。
私は http://github.com/divegeek/BlockHeadで働いていたコードを見ることができますA>
私はまさにそれを行うことができました -
ディスプレイ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オーダーの混乱を作成することがあります。